0

私のコードは次のとおりです。

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

このコードを使用して達成したいことは、変数から最初の単語を格納するときに、変数comの残りの単語を配列に格納する必要があることです。コードの 4 行目では、最初に 0 インデックスから最初の単語の長さまでの文字を削除することでこれを達成しました。これにより、最初の単語が削除され、空白に従って分割され、結果が配列に格納されます。問題は、これが起こらないことです。は最初の単語を格納していますが、常に null を表示しています。何をすべきか教えてください。これは、ループまたはその他の手法を使用して実現できます。しかし、パフォーマンスの問題があるため、多くのコードは必要ありません。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、それぞれが「24」の値を持つ16個の要素の配列があります

于 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 に答える