Как сделать сортировку 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);
}
→ Ссылка