我有一个字符串数组,想要使用LINQ将其转换为double数组。我不想使用foreach
循环。
var texts = new List<string>
{"-87.98 65", "-86.98 75", "-97.98 78", "-81.98 65"}
要:
var numerics = new List<IEnumerable<double>>
{
new List<double>{-87.98, 65},
new List<double>{86.98, 75},
new List<double>{-97.98 78},
new List<double>{-81.98 65}
}
LINQ有什么简短的方法吗?
答案 0 :(得分:7)
你可以用这个:
var doubles = texts.Select(x => x.Split()
.Select(y => double.Parse(y, CultureInfo.InvariantCulture))
.ToList()
.AsEnumerable() // added to comply to the desired signature
)
.ToList() // added to comply to the desired signature
;
首先选择字符串,将其拆分为空格,然后解析字符串数组中的字符串以使其翻倍。该输出将转换为列表。
答案 1 :(得分:0)
您可以这样做:
var texts = new List<string> { "-87.98 65", "-86.98 75", "-97.98 78", "-81.98 65" };
List<List<double>> newList =
texts.Select(t => t.Split(' ').Select(s => Convert.ToDouble(s)).ToList()).ToList();
foreach (var item in newList)
foreach (var item2 in item)
Console.Write(item2 + " ;");
输出:-87,98; 65; -86,98; 75; -97,98; 78; -81,98; 65;
但我不会称它为“短暂的方式”......
答案 2 :(得分:0)
这符合签名:
var texts = new List<string> {"-87.98 65", "-86.98 75", "-97.98 78", "-81.98 65"};
List<IEnumerable<double>> numerics =
texts.Select(s => new List<double>(s.Split().Select(sub => Double.Parse(sub, CultureInfo.InvariantCulture))))
.Cast<IEnumerable<double>>()
.ToList();