使用IComparer对相等对象列表进行排序会更改项目排序

时间:2016-06-16 10:56:19

标签: c# list sorting icomparer

当所有项目被视为相同时,我遇到IComparerSystem.Collections.Generic.List的问题:

如果源列表中的所有项目都被认为是相等的,我希望“已排序”列表与源列表具有完全相同的项目顺序(即保持不变)。

但是,我注意到排序列表中的项目顺序不同。

例如,假设我按名字对人物对象列表进行排序:

来源清单:

  1. John Miller
  2. John Smith
  3. John Doe
  4. John Williams
  5. 将名字与IComparer进行比较:

      1. John Williams
      1. John Smith
      1. John Miller
      1. John Doe

    重现:

    public class AllTheSameComparer : IComparer<int>
    {
        public int Compare(int x, int y)
        {
            return 0; // all are equal
        }
    }
    

    以下单元测试将失败超过20项:

        [TestMethod]
        public void testCompareSimple()
        {
            var numbers = new List<int>();
    
            for (var i = 0; i < 2000; i++)
            {
                numbers.Add(i);
            }
    
            var fixture = new AllTheSameComparer();
    
            numbers.Sort(fixture);
    
            for (var i = 0; i < numbers.Count; i++)
            {
                var actual = numbers[i];
                Assert.AreEqual(i, actual);
            }
    
        }
    

    这是预期的行为吗?有没有办法让我保持相等元素的原始项目顺序而不必比较第二个对象属性?

0 个答案:

没有答案