从列表字典创建新的字符串列表即从以字符串列表作为值的字典中创建

问题描述

我有一个字典字符串(键)和值字符串列表。我希望能够打印出//列表的内容(而不是获取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);
    }
}

解决方法

创建字典的一种更简洁的方法是在列表上使用GroupBy,以单词的字符串表示形式对项目进行分组,其中所有字符都用'-'替换,等于letter(我们通过使用Select方法来选择'-''a'字符来创建,然后使用{{1} }),然后使用string.Concat,将Dictionary<string,List<string>>用于字典ToDictionary()并在组本身上使用Group.KeyKey转换为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));
}

输出

enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...