2

次の形式の文字列があります。

"company=ABCorp, location=New York, revenue=10million, type=informationTechnology"

この文字列を解析して、「名前」と「値」のペアを次の形式で取得できるようにしたい

会社 = ABCCorp

場所=ニューヨークなど

これは、格納するのに適した任意のデータ構造です。私は多分考えてDictionary<string, string>()いましたが、私は提案を受け入れています。

C#でこれを行う適切な方法はありますか?

編集:ここでの私の最終的な目標は、次のようなものにすることです:

配列[会社] = ABCCorp. 配列[場所] = ニューヨーク。

上記を達成するためにどのようなデータ構造を使用できますか? 私の最初の考えは辞書ですが、何かが欠けているかどうかはわかりません。

ありがとう

4

4 に答える 4

4

String.SplitToDictionaryを使用すると、次のことができます。

var original = "company=ABCorp, location=New York, revenue=10million, type=informationTechnology";

var split = original.Split(',').Select(s => s.Trim().Split('='));

Dictionary<string,string> results = split.ToDictionary(s => s[0], s => s[1]);
于 2012-08-14T18:12:36.083 に答える
3
string s = "company=ABCorp, location=New York, revenue=10million, type=informationTechnology";
var pairs = s.Split(',')
        .Select(x => x.Split('='))
        .ToDictionary(x => x[0], x => x[1]);

ペアは、キーと値のペアを持つ辞書です。唯一の注意点は、コンマと文字列の間の空白を処理することをお勧めします。

于 2012-08-14T18:11:01.420 に答える
2

予想される構文に大きく依存します。これを行う 1 つの方法は、String.Split を使用することです: http://msdn.microsoft.com/en-us/library/system.string.split(v=vs.110).aspx

最初にコンマで分割し、次に返された文字列リスト内のすべての項目を繰り返し処理し、それらを均等に分割します。

ただし、これにはコンマと等号が値に決して存在しないことが必要ですか?

于 2012-08-14T18:07:52.520 に答える
1

私は弱い RegEx/LINQ バックグラウンドを想定しているので、「特別」なことをせずにそれを行う方法を次に示します。

string text = "company=ABCorp, location=New York, revenue=10million, type=informationTechnology";

string[] pairs = text.Split(',');
Dictionary<string, string> dictData = new Dictionary<string, string>();

foreach (string currPair in pairs)
{
    string[] data = currPair.Trim().Split('=');

    dictData.Add(data[0], data[1]);
}

これには、コンマ ( ,) と等号 ( =) が区切り記号として以外にデータ内に存在しないという要件があります。

これはString.Splitに大きく依存しています。

于 2012-08-14T18:09:53.353 に答える