以数字方式对List <string []>进行排序</string []>

时间:2013-05-25 10:16:24

标签: c# arrays list sorting numerical

我有List<string[]>。我添加了list.Add(new string[] {a, b, c, d}),其中d是一串数字。

我想用数字的第四个元素中的数字按数字排序列表。到目前为止,我只发现了这个:

list.Sort((s, t) => String.Compare(s[3], t[3]));

但是这按字母顺序排序,所以10个在2之前等。

是否有同样简单的方法对数字进行排序?

4 个答案:

答案 0 :(得分:2)

如果你使用linq,你可以这样做:

list = list.OrderBy(x => int.Parse(x[3])).ToList();

这将创建一个新列表,但可能不如直接排序列表那么有效。

答案 1 :(得分:1)

这个怎么样?

list.Sort((s, t) => int.Compare(int.Parse(s[3]), int.Parse(t[3])));

或(如果列表是所有数字,并且您希望结果为数字):

list = list.Select(n => n.Select(x => int.Parse(x)).ToArray()).OrderBy(x => x[3]).ToList();

(原谅格式化,在手机上)

答案 2 :(得分:0)

list.Sort((s, t) => System.Collections.Comparer.Default.Compare(Int32.Parse(s[3]), Int32.Parse(t[3])));

我的建议是你应该真正用公共成员a,b,c和d来实现你自己的课程。然后,您应该实现IComparable<T>并在CompareTo()方法中编写简单的比较逻辑。

答案 3 :(得分:0)

另一个解决方案(我在这里没有看到)是将委托实现为分拣机

 // Split the string into individual number strings
 List<String> items  = wrongOrderBase.Split(DELIMITER).ToList<String>();
 items.Sort(delegate(String strA, String strB)
            {
                int intA = int.Parse(strA);
                int intB = int.Parse(strB);
                return intA.CompareTo(intB);
            });
  // Re-join back into one string
  String sortedListString = String.Join(DELIMITER.ToString(), items);

这样,如果你想做任何特殊情况,你可以在委托中实现它。