【问题标题】:How do I sort an ArrayList containing more than 1 parameter per object alphabetically?如何按字母顺序对每个对象包含超过 1 个参数的 ArrayList 进行排序?
【发布时间】:2011-08-21 18:39:11
【问题描述】:

问候(不知道标题是否有意义)

我有一个ArrayList,其中可以包含不同数量的对象。

例子

private ArrayList items = new ArrayList();
var list = web.Lists[ListName];

items.Add(new { GroupName = value });

foreach (SPListItem item in list.Items)
{
   items.Add(new { GroupName = value, ItemID = item.ID, ItemName = item.Name });
}

正如您在上面看到的,我有一个只包含GroupName 的对象,然后是一个包含GroupName、ItemID 和ItemName 的对象

我想要做的是按他们的ItemName对所有项目进行排序。

当它只有一个参数时我没有问题,但是当它是多个参数时,我一无所知。我该怎么做?

【问题讨论】:

  • @Ziga,如果您举例说明您希望排序的内容和结果顺序,将会有所帮助。
  • 有什么方法可以使用有类型的List<SPListItem> 代替无类型的ArrayList?
  • 你可以使用 LINQ 吗?
  • 不包含ItemName的项目应该排在最前面还是最后?
  • @Juliet 不,因为正如您在我的帖子中看到的那样,该对象可以从只有 1 个参数变为包含 3 个参数。因此,我不能这么简单地指定它。

标签: c# sorting arraylist


【解决方案1】:

编辑:在添加到新数组列表之前排序

foreach(SPListItem item in list.Items.Cast<SPListItem>.OrderBy(i => i.Name))
{
   items.Add(new { GroupName = value, ItemID = item.ID, ItemName = item.Name });
}

较新的编辑: 如果您只想要一个可枚举的集合(没有数组列表,您无法轻松地从中提取项目),您可以使用 LINQ Select 运算符。

var items = ist.Items.Cast<SPListItem>.OrderBy(i => i.Name).Select(i => new { GroupName = value, ItemID = i.ID, ItemName = i.Name });

【讨论】:

  • @Yet 我收到此错误:System.InvalidCastException: 无法将类型为“f__AnonymousType0`1[System.String]”的对象转换为类型“Microsoft.SharePoint.SPListItem”。
  • 哦,您使用的是anonymousType,虽然您使用的是SPListItem 类型。您可以做的一件事是命名匿名类型,然后将其转换为正确的格式。如果您将其命名为 Item 那么您应该转换为 Item 而不是 SPListItem
  • @Yet 你能举个例子说明你的意思吗?
  • 我已经通过在创建匿名类型之前进行排序来更新我的答案。 (但是当你试图从 arraylist 中获取匿名类型的数据时,你可能会遇到麻烦,因为你不能强制转换为匿名类型)
  • @Yet 感谢您的帮助。我决定使用包含 4 个参数定义的自定义类,并在创建新项目之前进行排序。
猜你喜欢
  • 2013-10-28
  • 2017-05-22
  • 2021-03-20
  • 2019-02-03
  • 2019-08-02
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多