5

我有以下字符串模式:1:2,2:3.

这就像一个字符串中的数组:
第一个元素是:1: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,则 ToDictionary LINQ 方法是可行的方法:

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只拆分一次。

 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 回答