如何有效地拆分字符串,将其添加到List,并转换为Double?

时间:2018-05-24 20:46:07

标签: c# split

我有一些基本代码可以完成我想要它做的事情,但我认为它可以缩写/清理。然而,我正在努力解决这个问题。

代码如下:

List<string> positions = new List<string>();
List<string> players = new List<string>();

foreach (string element in fractionedList)
{
   positions.Add(element.Split(',')[2]); 
   positions.Add(element.Split(',')[3]); 
   positions.Add(element.Split(',')[4]); 

   players.Add(element.Split(',')[5]); 
   players.Add(element.Split(',')[6]); 
   players.Add(element.Split(',')[7]);
} 

List<double> convertedPositions = positions.Select(x => double.Parse(x)).ToList();
List<double> convertedPlayers = playerss.Select(x => double.Parse(x)).ToList();

作为参考,我的fractionedList看起来像:

"string0,string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12",
"string0,string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12",
"string0,string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12",
"string0,string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12",

所以我试图拆分List的每个字符串实例,获取接下来的三个元素,然后将它们添加到新的List中,然后将该List转换为新的双精度列表。我想知道是否有更简洁的方法来处理Split方法。是否有相当于Take()?此外,这一切都可以在一个List创建中完成,而不是创建一个字符串列表,创建一个双打列表吗?

2 个答案:

答案 0 :(得分:5)

我要改变的第一件事就是不要无缘无故地分裂你的弦乐6次。将其拆分一次并将结果存储在变量中。

使用一点LINQ,您可以缩短代码:

List<double> positions = new List<double>();
List<double> players = new List<double>();

foreach (string element in fractionedList)
{
    string[] elementSplit = element.Split(',');
    positions.AddRange(elementSplit.Skip(2).Take(3).Select(x => double.Parse(x));
    players.AddRange(elementSplit.Skip(5).Take(3).Select(x => double.Parse(x)); 
} 

我的代码所做的就是将您的element变量与,分开,就像您正在做的那样(现在只执行一次)。然后使用Linq的Take()Skip()我选择[2,3,4][5,6,7]索引并将它们添加到各自的列表中(解析后加倍)。

请记住,如果您的字符串输入无法合理地解析为double,则此代码将引发异常。如果你确定输入总是很好,那么这段代码应该让你最快。

答案 1 :(得分:1)

这将执行内联转换,而无需存储在初始字符串列表中

body {
    background-color: lightblue;
    color:purple;
    font-family: "Tahoma";
}
#cesiumContainer {
          width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
      }
h1 
{
    color: navy;
    background-color: green;
    margin-left: 20px;
    margin-right: 20px;
}
.dot
{
    color:blue;
    margin-right: 30px;
    font-size: 40;
}