0

我的代码是:

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

我想使用这段代码实现的是,当存储变量中com的第一个单词时,数组应该存储变量的剩余单词。在第 4 行代码中,我首先将字符从 0 索引删除到第一个单词的长度。这将删除第一个单词,然后根据空格将其拆分,然后将结果存储在数组中。问题是这没有发生。正在存储第一个单词,但始终显示为空。请有人告诉我该怎么做?我可以使用循环或其他技术来实现这一点。但由于性能问题,我不想要太多代码。datavaldatacomvalforeach

我的示例字符串是这样的:

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 答案,因为重新启动或重新创建项目的建议来自他。

4

3 回答 3

5

使用 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”

于 2013-04-06T14:08:48.277 回答
3
string[] val = data.Remove(0, data.IndexOf(' ') + 1).Split(' ');
于 2013-04-06T14:13:19.963 回答
1

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

所以这应该有效(如果你只想删除第一个单词):

string[] val = data.Split().Skip(1).ToArray();
于 2013-04-06T14:15:04.223 回答