2013-04-06 27 views
0

我的代码删除子,分裂的结果,并将其存储:从字符串数组中的

public void processData(string data) 
{ 
     string com = data.Split(' ')[0]; 
     string[] val = data.Remove(0,com.Length).Split(' '); 
} 

我想使用此代码实现的是,当com存储从data变量的第一个字, val数组应该存储data变量的其余字。在第四行代码中,我通过首先将字符从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

这应该工作。你能显示下面几行代码吗?什么意思是“显示为空”,在哪里? – 2013-04-06 14:08:49

+0

之后没有任何代码行。所有必需的代码是这样的。正在调用它的代码完美地将字符串值传递给它。 – 2013-04-06 14:11:12

+0

如果您担心性能问题,调用字符串拆分并不是非常高效。你为什么现在担心优化这个步骤?你没有给出任何背景......看起来像不成熟的优化。 – SMT 2013-04-06 14:13:44

回答

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”的值

+0

相同的输出。没有工作 – 2013-04-06 14:13:27

+0

你说这个val是* null *之后调用这个?你的'data'变量中的字符串是什么? – Blachshma 2013-04-06 14:14:34

+0

我编辑了我的问题。一探究竟。 – 2013-04-06 14:19:51

3
string[] val = data.Remove(0, data.IndexOf(' ') + 1).Split(' '); 
1

我假定它val不显示null但第一个字是空的,因为已删除了第一个字的从子字符串,但是你还没有删除分隔符(空格)。

所以这应该工作(如果你只是想删除的第一个字):

string[] val = data.Split().Skip(1).ToArray(); 
+1

其不工作... – 2013-04-06 14:26:18