5

私は次の文字列パターンを持っています:1:2,2:3

これは、1つの文字列の配列に似ています。
最初の要素は次1:2
のとおりです。2番目の要素は次のとおりです。2:3

それを解析して辞書を作成したい:

1,2 // 0 element in Dictionary  
2,3 // 1 element in Dictionary  

これは私のコードです:

Dictionary<int,int> placesTypes = new Dictionary<int, int>();

foreach (var place in places.Split(','))
{
   var keyValuePair = place.Split(':');
   placesTypes.Add(int.Parse(keyValuePair[0]), int.Parse(keyValuePair[1]));
}

これを行うための最良の方法はありますか?

ありがとう。

4

5 に答える 5

9

これに変更できます:

var d = s.Split(',')
         .Select(x => x.Split(':'))
         .ToDictionary(x => int.Parse(x[0]), x => int.Parse(x[1]));
于 2012-05-15T07:15:17.560 に答える
6
Dictionary<int, int> dict = "1:2,2:3".Split(',')
                           .Select(x => x.Split(':'))
                           .ToDictionary(x => int.Parse(x[0]), 
                                         x => int.Parse(x[1]));
于 2012-05-15T07:12:10.727 に答える
1
var result = input.Split(new[]{','})
    .Select(s => s.Split(new[]{':'})) 
    .ToDictionary(k => int.Parse(k[0]), v=> int.Parse(v[1]));

実例: http: //rextester.com/GTKO60478

于 2012-05-15T07:17:21.430 に答える
1

C#> = 3.5を使用している場合は、ToDictionaryLINQメソッドが次の方法です。

var dictionary = places.Split(',')
                       .Select(place => place.Split(':'))
                       .ToDictionary(keyValue => int.Parse(keyValue[0]), keyValue => int.Parse(keyValue[1]));

それができない場合は、次のようにすれば十分です。

public static Dictionary<string, string> ToDictionary(string value, char pairSeperator, char valueSeperator) 
{
    Dictionary<int, int> dictionary = new Dictionary<int, int>();
    foreach (string pair in value.Split(pairSeperator))
    {
        string[] keyValue = pair.Split(valueSeperator);
        dictionary.Add(keyValue[0], keyValue[1]);
    }

    return dictionary;
}
于 2012-05-15T07:17:37.997 に答える
0

MoreLinqを使用して、1回だけ分割します。バッチ

 Dictionary<int, int> dict = places.Split(',', ':').Batch(2).Select(x=>x.ToArray()).ToDictionary(x=>int.Parse(x[0]),x=>int.Parse(x[1]));
于 2012-05-15T08:32:06.450 に答える