2

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

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

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

但这是按字母顺序排序的,所以 10 排在 2 前面,依此类推。

有没有一种同样简单的方法来对它进行数字排序?

4

4 回答 4

2

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

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

不过,这将创建一个新列表,并且可能不会像直接对列表进行排序那样有效。

于 2013-05-25T10:20:20.137 回答
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();

(借口格式化,在手机上)

于 2013-05-25T10:32:37.170 回答
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()

于 2013-05-25T10:28:05.963 回答
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);

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

于 2014-01-14T19:32:45.673 回答