按列表降序对相同的值字段进行排序

时间:2011-11-15 17:31:33

标签: c# list

如何使用降序对通用列表中的相同值字段进行排序。

示例:

List<int> objList = new List<int>();

objList.Add(1);
-> objList.Add(0);
-> objList.Add(0);
objList.Add(2);
-> objList.Add(0);

这是我的来源,我想在降序模式中对零值进行排序。

我使用此代码对数字进行排序(实际上是深度),上面的示例与此无关,但不知怎的,它是相同的。在我的通用列表中,我有几个深度,它们可能彼此相同,我想按顺序排列相同的字段。

Objects.Sort(
   delegate(Classes.Object.GameObject Object1, Classes.Object.GameObject Object2)
   {
       return Object1.Depth.CompareTo(Object2.Depth);
   }
);

答案:将来可能会帮助某人

    // Reverse same oredered
    CurrentSameOrderedFind = Objects[0].Depth;
    CurrentSameOrderedID = 0;
    for (int i = 1; i <= Objects.Count - 1; i++)
    {
        if (Objects[i].Depth != CurrentSameOrderedFind)
        {
            SameOrederedFound = true;
            Objects.Reverse(CurrentSameOrderedID, i - 1);
            CurrentSameOrderedFind = Objects[i].Depth;
            CurrentSameOrderedID = i;
        }
    }
    if (!SameOrederedFound)
    {
        Objects.Reverse();
    }

2 个答案:

答案 0 :(得分:3)

要按照上面显示的代码显示的List<int>按降序排序,有一个非常简单的Linq解决方案:objList = objList.OrderByDescending(i => i).ToList();

通过阅读问题的其余部分,您是否要对具有深度属性的对象列表进行排序?如果是这样,这应该对你有用:

var myList = new List<someTypeWithDepth>();
myList = myList.OrderByDescending(o => o.depth).ToList();

如果您在使用这些列表的任何情况下都可以将其键入IEnumerable<T>而不是List<T>,那么您可以删除那些丑陋的ToList()来电

答案 1 :(得分:1)

如果我理解正确,您希望您的列表按照GameObject.Depth的降序排序,并且您有一个实现可以对您的集合进行排序,但是按升序而不是降序。鉴于此,这是我能提出的最懒的答案:

根据我的评论编辑的代码。真的,为什么你不能在问题中说出你想要的东西?我同意这并不复杂,但如果你不提出好的问题,你就不会得到很好的帮助。

   List<GameObject> oldList = new List<GameObject>(Objects); 
   Objects.Sort( 
       delegate(Classes.Object.GameObject Object1, Classes.Object.GameObject Object2) 
       { 
           int compareValue = -1 * Object1.Depth.CompareTo(Object2.Depth); 
           if(compareValue == 0)
               compareValue = oldList.IndexOf(Object2).CompareTo(oldList.IndexOf(Object1));
           return compareValue;
       } 
    ); 

难以达到最佳状态,但并不意味着。