我有List<string[]>
。我添加了list.Add(new string[] {a, b, c, d})
,其中d
是一串数字。
我想用数字的第四个元素中的数字按数字排序列表。到目前为止,我只发现了这个:
list.Sort((s, t) => String.Compare(s[3], t[3]));
但是这按字母顺序排序,所以10个在2之前等。
是否有同样简单的方法对数字进行排序?
答案 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);
这样,如果你想做任何特殊情况,你可以在委托中实现它。