我有一个项目数组,想要按照其中一个属性进行排序。 我可以使用 "item.Fields["FieldName"].Value" 访问该属性,但它作为字符串返回,但是我可以将其强制转换为整数。
我看了一下 OrderBy<>,但不知道如何使用它。
明确一点,OrderBy
不会原地对数组进行排序——它将返回一个经过排序的新序列,是数组的一个排序后的 副本。如果这样可以,那么你需要类似于以下的 代码:
var sorted = array.OrderBy(item => item.Fields["FieldName"].Value);
另一方面,我不理解你的评论,即属性返回为字符串,但可以将其转换为int - 你不能将字符串强制转换为整数,你必须解析它们。如果这是你的意思,你可能想要:
var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));
如果你想要将它作为数组,你可以在之后调用ToArray()
:
var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value))
.ToArray();
如果您想要就地排序,您可以使用Array.Sort
,但这可能会有些凌乱。
使用Sort方法对数组进行排序:
Array.Sort(theArray, (a, b) => String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value));
如果您未使用 C# 3,则使用委托而不是 lambda 表达式:
Array.Sort(theArray, delegate(Item a, Item b) { return String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value); } );
(这也适用于框架2,而OrderBy扩展则不适用。)
var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));
var sortedArray = items.OrderBy(i => i.property).ToArray();
List<T>.Sort
是基于快速排序实现的,在大多数情况下它不是稳定排序。
然而,你可以使用该实现执行不稳定排序;也就是说,如果两个元素相等,则它们的顺序可能不被保留。相比之下,稳定排序会保留相等元素的顺序。
Enumberable.OrderBy
来执行稳定排序。
该方法执行稳定排序;也就是说,如果两个元素的键相等,则元素的顺序被保留。相比之下,不稳定排序不会保留具有相同键的元素的顺序。
OrderBy
? - AlbatrossCafe