【问题标题】:Sorting array of object by name (multi dimensional)按名称排序对象数组(多维)
【发布时间】:2011-09-03 07:54:47
【问题描述】:

如何按名称对对象数组进行排序。

数组是如何构造数组的例子:

     object[] o = new object[items.Count+(row-exists)];
     int i = 0;
     for(i=0; i<items.Count;i++)
     {
    XmlNode item = items[i];

    o[i] = new object[5];
    ((object[])o[i])[0] = Safe(item, "ows_Title");
    ((object[])o[i])[1] = Safe(item, "ows_Column5");
    ((object[])o[i])[2] = ((string)Safe(item, "ows_Column7")).Trim(new char[] {'\''});
    ((object[])o[i])[3] = Convert.ToDouble(Safe(item, "ows_Column12"), provider);
    ((object[])o[i])[4] = Convert.ToDouble(Safe(item, "ows_Column9"), provider);
}

我希望根据 ((object[])o[i])[0] 的值对 'o' 进行排序。

谢谢

【问题讨论】:

  • 无法回答您的问题。你能详细说明一下吗?
  • 数组 'o' 包含带有新数组的对象,对吗?我希望根据第二个数组的索引 0 的值/(字符串)对 'o' 进行排序。我不确定我是否能更好地解释自己。
  • 为什么不将对象存储在通用的 SortedList 中,将对象的主键作为列表的键,或者根据您的要求选择键?
  • 仍然无法满足您的要求。
  • 所以 o 在 i 的每次迭代中都会以不同的方式排序?

标签: c# arrays list sorting object


【解决方案1】:

我想我明白了。下面的 linq 应该可以满足您的要求。

var sortedResult = o.OrderBy(x => ((object[])x)[0]).ToArray();

但是,我会考虑使用不同的数据结构。你能创建一个新类型来封装第二个数组代表的内容吗?例如:

class MyObject
{
  Safe Title {get; set;}
  Safe Column5 {get; set;}
  String Column7 {get; set;}
  double Column9 {get; set;}
  double Column12 {get; set;}
}

然后您可以使用SortedList 来存储新对象。

【讨论】:

  • 谢谢 IndigoDelta,看来你明白我需要什么了。不幸的是,我无法访问 linq,而且我使用的是 2.x 框架。
  • 我很同情这个无法访问 linq 的人。如果需要,您可以编写自己的排序算法。看看some examplesCodeProject 上有一个排序算法库,可能会对您有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-15
  • 2021-10-02
  • 2017-08-07
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多