拆分文本和转换linq

时间:2015-07-31 11:50:06

标签: c# linq

我有一个字符串数组,想要使用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有什么简短的方法吗?

3 个答案:

答案 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();