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

如何使用LINQ提取Double值并合并为数组?

用LINQ实现字符串数值提取的思路与代码

当然可以用LINQ实现这个逻辑,核心思路是用LINQ的链式调用替代嵌套循环,同时保留原有的筛选和转换逻辑:

  • 扁平化分割结果:先用Split(';')把原字符串拆分成一级子串,再通过SelectMany将每个一级子串按:拆分后的二级子串合并成一个扁平集合,替代原有的两层foreach循环。
  • 筛选有效元素:用Where方法过滤掉空/空白字符串,以及以#开头的子串,对应原代码中的if判断条件。
  • 类型转换与收集:用Select将筛选后的字符串转换为double类型,最后用ToList()收集成列表(或者直接用于输出)。

对应LINQ实现代码

string r = "#1:234.1;#2:2344.2:#3:38.0";
List<double> v = r.Split(';')
                  .SelectMany(x => x.Split(':'))
                  .Where(y => !string.IsNullOrWhiteSpace(y) && !y.StartsWith("#"))
                  .Select(double.Parse)
                  .ToList();

Console.WriteLine(string.Join("\n", v));

更安全的版本(处理转换失败的情况)

如果原字符串可能存在无法转换为double的无效内容,可以用double.TryParse避免抛出异常:

string r = "#1:234.1;#2:2344.2:#3:38.0;#4:abc";
List<double> v = new List<double>();
r.Split(';')
 .SelectMany(x => x.Split(':'))
 .Where(y => !string.IsNullOrWhiteSpace(y) && !y.StartsWith("#"))
 .ToList()
 .ForEach(y => { if (double.TryParse(y, out double num)) v.Add(num); });

Console.WriteLine(string.Join("\n", v));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:05:19