我有一些基本代码可以完成我想要它做的事情,但我认为它可以缩写/清理。然而,我正在努力解决这个问题。
代码如下:
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创建中完成,而不是创建一个字符串列表,创建一个双打列表吗?
答案 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;
}