我有一个List<string[]>
. 我添加到它list.Add(new string[] {a, b, c, d})
,其中d
是一串数字。
我想按数组第四个元素中的数字对列表进行数字排序。到目前为止,我只发现了这个:
list.Sort((s, t) => String.Compare(s[3], t[3]));
但这是按字母顺序排序的,所以 10 排在 2 前面,依此类推。
有没有一种同样简单的方法来对它进行数字排序?
如果你使用 linq,你可以这样做:
list = list.OrderBy(x => int.Parse(x[3])).ToList();
不过,这将创建一个新列表,并且可能不会像直接对列表进行排序那样有效。
那这个呢?
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();
(借口格式化,在手机上)
list.Sort((s, t) => System.Collections.Comparer.Default.Compare(Int32.Parse(s[3]), Int32.Parse(t[3])));
我的建议是你应该用公共成员 a、b、c 和 d 真正实现你自己的类。然后,您应该IComparable<T>
在方法中实现并编写简单的比较逻辑CompareTo()
。
另一个解决方案(我在这里没有看到)是将委托实现为排序器
// 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);
这样,如果您想做任何特殊情况的事情,您可以在委托中实现它。