Как сделать сортировку List начиная с нужного индекса с определённым колич переменных
У Меня есть список:
class Chrom
{
public Chrom(int x,int y)
{
this.x = x;
this.y = y;
z = (this.x - 3 * this.y - 3) / (Math.Pow(this.x, 2) + 2 * Math.Pow(this.y, 2)+1);
}
public int x, y;
public double z;
}
List<Chrom> chroms = new List<Chrom>();
for(int i=0;i<16;i+=4)
{
int CountChrom = chroms.Count-1;
chroms.Add(new Chrom(chroms[CountChrom-1].x,chroms[CountChrom].y));
chroms.Add(new Chrom(chroms[CountChrom - 2].x, chroms[CountChrom].y));
chroms.Add(new Chrom(chroms[CountChrom].x, chroms[CountChrom-1].y));
chroms.Add(new Chrom(chroms[CountChrom].x, chroms[CountChrom - 2].y));
chroms.Sort(i, 4, (prop, value) => prop.z.CompareTo(value.z));
}
здесь я каждый раз добавляю 4 новых переменных и я хочу сортировать только 4 новых элемента по возрастанию но не совсем понимаю как написать 3 параметр функции sort
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Создайте компарер
public class ZComparer : IComparer<Chrom>
{
public int Compare(Chrom current, Chrom other)
=> current.z.CompareTo(other.z);
}
List<Chrom> chroms = new List<Chrom>();
IComparer<Chrom> comparer = new ZComparer();
for (int i = 0; i < 16; i += 4)
{
int CountChrom = chroms.Count - 1;
chroms.Add(new Chrom(chroms[CountChrom - 1].x, chroms[CountChrom].y));
chroms.Add(new Chrom(chroms[CountChrom - 2].x, chroms[CountChrom].y));
chroms.Add(new Chrom(chroms[CountChrom].x, chroms[CountChrom - 1].y));
chroms.Add(new Chrom(chroms[CountChrom].x, chroms[CountChrom - 2].y));
chroms.Sort(i, 4, comparer);
}