You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#按字符串数组第二个元素数值排序List及输出异常问题

解决排序与输出问题:让结果符合预期且可读

看起来你碰到了两个小问题:排序逻辑没达到预期,以及直接输出集合只显示了类型名称。我们逐个解决:

1. 修正排序逻辑,让"234"排在末尾

你现在用OrderBy(f => f[1])是按字符串来排序的,而字符串比较是按字符逐个对比的——比如"234"和"35",第一个字符'2'比'3'小,所以"234"会排在"35"前面,这和你的期望相反。

要按数值大小排序,得把f[1]转换成整数再比较:

var result = l.OrderBy(f => int.Parse(f[1])).ToList();

如果f[1]可能存在非数字的情况(比如空字符串、字母),建议用int.TryParse避免抛出异常,把无法转换的项放到最后:

var result = l.OrderBy(f => {
    int.TryParse(f[1], out int num);
    return num;
}).ToList();

2. 正确输出排序后的内容

直接MessageBox.Show($"{result}")会调用List<string[]>的默认ToString()方法,它只会返回类型的全称,不会遍历显示集合里的内容。你需要把每个数组的元素拼接成可读的字符串,再把所有项合并:

比如生成每行一个条目,清晰展示ID和数值:

var output = string.Join(Environment.NewLine, result.Select(arr => $"ID: {arr[0]}, 数值: {arr[1]}"));
MessageBox.Show(output);

如果想要更简洁的格式,也可以用逗号分隔每个数组的元素:

var output = string.Join(Environment.NewLine, result.Select(arr => string.Join(", ", arr)));
MessageBox.Show(output);

完整可运行代码

把两个部分结合起来,完整代码如下:

var l = new List<string[]>() { 
    new string[] { "10945730333", "5"}, 
    new string[] { "298543022", "234"}, 
    new string[] { "382958320", "35"}, 
};

// 按数值从低到高排序
var result = l.OrderBy(f => int.Parse(f[1])).ToList();

// 生成可读的输出文本
var output = string.Join(Environment.NewLine, result.Select(arr => $"ID: {arr[0]}, 数值: {arr[1]}"));

// 弹出显示结果
MessageBox.Show(output);

运行后,你会看到符合预期的排序结果:

ID: 10945730333, 数值: 5
ID: 382958320, 数值: 35
ID: 298543022, 数值: 234

内容的提问来源于stack exchange,提问作者Ice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:32:33