我试图在拆分后按值排序列表。
例如我的数据看起来像这样。
Z|2
A|1
我希望我的列表按拆分后的值排序
所以我会得到
A|1
Z|2
这是我正在使用的,但我得到了错误:
{“输入字符串的格式不正确。”}
All = All.OrderBy(s => int.Parse(s.Split('|')[1])).ToList();
任何帮助都是极好的!谢谢!
这会起作用:
All = All.OrderBy(s => int.Parse(s.Split('|').Last())).ToList();
更好的方法是使用结构化类型的列表而不是哑字符串列表。例如,您可以有一个列表Tuple<string, int>
并简单地按第二个成员对其进行排序。您还可以将元组放入有序容器中并自动完成排序。
您需要先跳过无效格式,假设放在顶部:
All = All.OrderBy(s => {
var parts = s.Split('|');
if (parts.Length != 2)
return int.MinValue;
int value;
if (int.TryParse(parts[1], out value))
return value;
return int.MinValue;
});
TryParse
如果您有不确定的值,您可以使用。这会将无法解析的任何值放在列表的最后:
All = All.OrderBy(s => {
int value;
if (!Int32.TryParse(s.Split('|')[1], out value)) {
value = Int32.MaxValue;
}
return value;
}).ToList();
(注意:最大可能的 int 值用于将这些项目放在列表的最后,如果您有任何其他值为 2147483648 的项目,它们将与这些项目混合。对于也适用于该值的解决方案,您将需要创建一个比较器而不是仅从字符串中提取值的委托。)
您的代码很好 - 您必须有一些无效数据。仔细检查初始列表中的值,以确保在管道之后没有任何非数字值或其他类似的值。
编辑
您总是可以捕获错误并以不同的方式处理它们,例如:
// This would put all failures at the top of the list
All = All.OrderBy(s => {
try { return int.Parse(s.Split('|')[1]); }
catch { return 0; }
}).ToList();