【问题标题】:split string to Dictionnary<string, int>将字符串拆分为 Dictionary<string, int>
【发布时间】:2014-07-21 19:31:49
【问题描述】:

我有一个这样的字符串:“内容;123 内容;456 内容;789”等。

我想拆分这个字符串来得到一个字典,但我不知道你能做到。我尝试拆分字符串,但我只有一个列表。

内容(分号前)始终是唯一的字符串。 在分号之后,我总是有一个数字,直到找到空格。 数字始终是 int(不需要浮点数)。

有人可以帮帮我吗?

【问题讨论】:

  • “内容始终是唯一的字符串” - 但它可以包含空格吗?
  • 如果您将字符串拆分为一个列表,那么您已经完成了 75% 的工作。接下来,您需要将列表项添加到字典中。
  • 为什么投反对票?用户清楚地说明了问题。
  • @Kjata30:因为发帖人只是要求社区编写他们的代码。听起来他们调用了 .Split(),看到它给出了一个列表,然后放弃了。回想起来,我最初应该回答“到目前为止你尝试了什么?”下次我会这样做。
  • 我不知道在 Select 中拆分以组合双重拆分并获取 ToDictionnary 调用的元素。看来每个人都应该生在代码里。

标签: c# dictionary split


【解决方案1】:

您可以使用以下 LINQ 表达式:

"content;123 contents;456 contentss;789"
    .Split(' ')
    .Select(x => x.Split(';'))
    .ToDictionary(x => x[0], x => int.Parse(x[1]));

【讨论】:

  • 假设“内容”从不包含空格。
  • @HenkHolterman,对!否则,我会更喜欢 EZI 的正则表达式解决方案。
【解决方案2】:
string input = "content1;123 content2;456 content3;789";
var dict = Regex.Matches(input, @"(.+?);(\d+)").Cast<Match>()
                .ToDictionary(m => m.Groups[1].Value, m => int.Parse(m.Groups[2].Value));

【讨论】:

    【解决方案3】:

    你可以这样做:

    string value = "content;123 contents;456 contentss;789";
    Dictionary<string, int> data = new Dictionary<string,int>();
    
    foreach(string line in value.Split(' '))
    {
        string[] values = line.Split(';');
        if (!data.ContainsKey(values[0]))
        {
            data.Add(values[0], Convert.ToInt32(values[1]));
        }
    }
    

    【讨论】:

      【解决方案4】:
      var myList = "content1;number1 content2;number2 content3;number3";
      var myDictionary = myList.Split(' ').Select(pair => pair.Split(';')).ToDictionary(splitPair => splitPair[0], splitPair => int.Parse(splitPair[1]));
      

      【讨论】:

        【解决方案5】:
            static void Main(string[] args)
            {
                string content = "content;123 contents;456 contentss;789";
                Dictionary<string, int> result = new Dictionary<string, int>();
        
                content.Split(' ').ToList().ForEach(x =>
                {
                    var items = x.Split(';');
                    result.Add(items[0], int.Parse(items[1]));
                });
        
                foreach(var item in result)
                {
                    Console.WriteLine("{0} -> {1}" , item.Key, item.Value);
                }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多