使用对象数组中的数组键对对象排序

时间:2013-04-29 07:15:05

标签: c# arrays sorting object

如何使用元素键对Object Array中的Array进行排序?

请参阅图片了解更多信息: Array in object Array

因此,例如在图片中你可以看到我们现在有8个对象,所以我们想要用新数组中的键对8对象进行排序,例如在数组中使用“ parentId ”键排序8对象或“ categoryName “数组中的键!!!”

但我认为我们遇到了问题,因为我们无法访问新数组中的密钥!!!

所以我认为这段代码对我没有帮助:

 Array.Sort....

现在我怎样才能像这样用数组键对对象进行排序?

亲切的问候

3 个答案:

答案 0 :(得分:2)

如果您使用Lists,可以这样排序:

List<objectName> yourList = yourArray.TypeOf<objectName>().ToList();
yourList.Sort((x,y) => x.yourKey.CompareTo(y.yourKey));

答案 1 :(得分:2)

从你的问题来看,这并不明显,但你要排序的数组似乎包含通过使用相同的键集来表示对象实例的字典。要访问您需要将数组元素转换为正确的字典类型(我假设它是Dictionary<String, String>)。然后,您可以使用LINQ进行排序,方法是使用OrderBy子句:

var sortedByCategoryName = result
  .Cast<IDictionary<String, String>>()
  .OrderBy(d => d["categoryName"]);

排序将基于字符串排序,因为值是字符串。但是,如果您想按parentId(这是一个数字)排序,首先需要执行转换:

var sortedByParentId = result
  .Cast<IDictionary<String, String>>()
  .OrderBy(d => Int32.Parse(d["parentId"]));

请注意,如果字典中缺少某个键,或者在第二个示例中,如果该值无法解析为整数,则上述代码将抛出异常。

答案 2 :(得分:1)

如果您使用linq,您可以进行多级排序

using System.Linq;

Array result = new Array(from item in your array order by item.parentId, item.categoryName select item);