我的代码是:
public void processData(string data)
{
string com = data.Split(' ')[0];
string[] val = data.Remove(0,com.Length).Split(' ');
}
使用此代码我想要实现的是当com
存储data
变量中的第一个单词时,val
数组应该存储data
的剩余单词变量。在第4行代码中,我通过首先将字符从0索引移到第一个单词的长度来实现这一点。这将删除第一个单词,然后根据空格将其拆分,然后将结果存储在数组中。问题是这没有发生。 com
存储第一个单词,但val
始终显示为空。请有人告诉我该怎么办?我可以使用foreach
循环或其他技术实现此目的。但由于性能问题,我不想要太多代码。
我的示例字符串是这样的:
begin main
timesteps 1750
weeks 250
campaigns 6
scenario 10
epsilon 0.01
powerplant1 11
powerplant2 10
constraint13 46
constraint14 7
constraint15 0
constraint16 1
constraint17 3
constraint18 0
constraint19 1
constraint20 1
constraint21 1
durations 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
左侧有字段,右侧有值。我想分开存储它们。
示例:字段为timesteps
,值为1750
解决方案:
这是非常愚蠢的解决方案,但我刚刚重新启动了我的Visual Studio,它工作正常。
感谢所有人的好评。我+1所有答案并标记Blachshma答案,因为重新启动或重新创建项目的建议来自他。
答案 0 :(得分:4)
使用LINQ的 Skip()
string[] val = data.Split(' ').Skip(1).ToArray();
强调你的例子中的字符串:
string data = "timesteps 1750";
string com = data.Split(' ')[0]; // Returns timesteps
string[] val = data.Split(' ').Skip(1).ToArray(); // Returns 1750
您的另一个例子:
string data = "durations 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24";
com
将有“持续时间”,val
将包含16个元素的数组,每个元素的值为“24”
答案 1 :(得分:3)
string[] val = data.Remove(0, data.IndexOf(' ') + 1).Split(' ');
答案 2 :(得分:1)
我假设它val
没有显示null
但是第一个单词是空的,因为你已经从字符串中删除了第一个单词的子字符串,但是你没有删除分隔符(白色 - 空间)。
所以这应该有用(如果你只想删除第一个单词):
string[] val = data.Split().Skip(1).ToArray();