解析字符串并创建字典

本文关键字:创建 字典 串并 字符串 字符 | 更新日期: 2023-09-27 18:34:15

我有以下字符串模式: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]));
}

有最好的方法吗?

谢谢。

解析字符串并创建字典

你可以把它改成这样:

var d = s.Split(',')
         .Select(x => x.Split(':'))
         .ToDictionary(x => int.Parse(x[0]), x => int.Parse(x[1]));
Dictionary<int, int> dict = "1:2,2:3".Split(',')
                           .Select(x => x.Split(':'))
                           .ToDictionary(x => int.Parse(x[0]), 
                                         x => int.Parse(x[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

如果您使用的是 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;
}

仅拆分一次,使用 MoreLinq.Batch

 Dictionary<int, int> dict = places.Split(',', ':').Batch(2).Select(x=>x.ToArray()).ToDictionary(x=>int.Parse(x[0]),x=>int.Parse(x[1]));