我每天比较物品,但我的日子是相同的。 我有一个列表,例如:
我的比较器:我每天比较它
public class byDay : Comparer<int>
{
public override int Compare(int day1, int day2)
{
if (day2 - day1 > 0)
{
return -1;
}
if (day2 - day1 < 0)
{
return 1;
}
return 0;
}
最后,我的列表每天的顺序不一样,但却相同。
我注意到“比较器”不一定比较下一个对象。例如:第1项为第2项,第1项为第4项。
因此,我的列表通常不应更改,但保留原始顺序的日期相同。
“return 0”不应改变列表中元素的位置???
答案 0 :(得分:1)
错误行为的起源是默认排序算法(QuickSort)不是稳定。可能的 Linq 解决方案(按顺序)是按索引排序:
// TODO: put the actual type here
List<DateTime> source = ....
List<DateTime> result = source
.Select(item, index => new { // <- data itself + index
item = item,
index = index
})
.OrderBy(data => data.item) // <- by day, date, etc.
.ThenBy(data => data.index) // <- on tie by index
.Select(data => data.item) // <- return to original type
.ToList();
缺点:创建一个新列表istance(result
)。如果您希望整理现有列表,则必须实现任何稳定排序算法(QuickSort除外),例如: 合并排序。