我有一个泛型列表,其中包含以下项目:
- A1 (排序索引 1)
- A2 (排序索引 2)
- B1 (排序索引 3)
- B2 (排序索引 3)
- B3 (排序索引 3)
它们的比较器采用以下形式:
this.sortIndex.CompareTo(other.sortIndex)
当我对项目列表进行List.Sort()时,输出的顺序如下:
- A1
- A2
- B3
- B2
- B1
有没有任何调整我可以对比较器进行以解决这个问题?
我有一个泛型列表,其中包含以下项目:
它们的比较器采用以下形式:
this.sortIndex.CompareTo(other.sortIndex)
OrderBy
会保留相等项的顺序:
myList = myList.OrderBy(item => item.SortIndex).ToList();
您可以更改比较器,对值进行二次排序:
if (this.sortIndex.CompareTo(other.sortIndex) == 0) // same sortIndex
{
return this.Value.CompareTo(other.Value);
}
return 0;
Sort使用QuickSort算法,但在比较相等的情况下不保证原始序列。
如果您仍想使用List.Sort,可以添加一个基于原始索引的第二个比较条件,如下所示:
int c = this.sortIndex.CompareTo(other.sortIndex);
if (c == 0)
c = this.originalIndex.CompareTo(other.originalIndex);
return c;