如何使用降序对通用列表中的相同值字段进行排序。
示例:
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();
}
答案 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;
}
);
难以达到最佳状态,但并不意味着。