首页 > 解决方案 > 从列表字典创建新的字符串列表(即从具有字符串列表作为值的字典)

问题描述

我有一个字典字符串(键)和值字符串列表。我希望能够打印出 // 列表的内容(而不是获取 System.Collections.Generic.List`1[System.String] ),而且 // 能够获取每个值(字符串)并创建新列表

基本上我应该在结果字典中有3个列表(一个由虚幻组成,另一个//包含//击球手和模式,另一个包含4个不包含任何a的单词)

我有这样的东西

using System;
    
using System.Collections.Generic;
    
using System.Text;
    
static void Main(string[] args)
{
    List<string> wordList = new List<string>() { "unreal", "batter", "butter", "patter", 
                          "tested", "nested", "pested" };
    char letter = 'a';
    
    Dictionary<string, List<string>> results = new Dictionary<string, List<string>>();
    // So at each key ( so the ----a- for instance) it will have it's own dictionary
    foreach (string word in wordList)
    {
         StringBuilder builder = new StringBuilder();
         //   builder.Append(word);
         for (int i = 0; i < word.Length; i++)
         {
             //  builder = null;
             if (word[i] == letter)
             {
                 builder.Append(letter);
                 //  key = String.Join(word, wordList);
                 // builder[i] = letter;
             }
             else
             {
                 // builder[i] = '-';
                 builder.Append('-');
             }
         }

         string key = builder.ToString();

         // var result = string.Join(key, word);
         if (results.ContainsKey(key))
         {
             List<string> list = results[key];
             list.Add(word);
         }
         else
         {
             List<string> list = new List<string>();
             list.Add(word);
             results.Add(key, list);
         }
              
         //   results.Add(result)          
    }

    foreach(KeyValuePair<string,List<string>> kvp in results)
    {
        Console.WriteLine("{0} has {1} words", kvp.Key, kvp.Value.Count);
        // Console.WriteLine(kvp.Value.Count);
    }
}

标签: c#listlinqdictionarykey-value

解决方案


创建字典的一种更简洁的方法是GroupBy在列表中使用单词的字符串表示形式对项目进行分组,其中所有字符都替换为a,'-'除了那些相等的letter(我们通过使用Select方法来选择a'-''a'字符,然后使用 ) 将结果集组合成一个字符串,string.Concat然后将其转换为Dictionary<string, List<string>>using ToDictionary(),使用Group.Key字典Key,并ToList()在组本身上使用来创建字典Value

List<string> wordList = new List<string>()
{"unreal", "batter", "butter", "patter", "tested", "nested", "pested"};

char letter = 'a';

Dictionary<string, List<string>> results = wordList
    .GroupBy(item => string.Concat(item.Select(c => c == letter ? c : '-')))
    .ToDictionary(group => group.Key, group => group.ToList());

然后您可以使用以下命令输出每个列表的实际项目值string.Join

foreach (KeyValuePair<string, List<string>> kvp in results)
{
    Console.Write("{0} has {1} words: ", kvp.Key, kvp.Value.Count);
    Console.WriteLine(string.Join(", ", kvp.Value));
}

输出

在此处输入图像描述


推荐阅读