c# - 从列表字典创建新的字符串列表(即从具有字符串列表作为值的字典)
问题描述
我有一个字典字符串(键)和值字符串列表。我希望能够打印出 // 列表的内容(而不是获取 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
在列表中使用单词的字符串表示形式对项目进行分组,其中所有字符都替换为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));
}
输出
推荐阅读
- batch-file - 我如何从文本文件中取出一行并使用批处理将其输入网站?
- intellij-idea - 测试框架意外退出 - Cucumber 测试 - Intellij Via Feature 文件
- r - 如何在 R 编程中将特定行值第 1 天、第 2 天等更改为同一行的列值
- python - KivyMD:Android 上未设置 MDDropDownItem;在桌面上工作
- java - 未知目标“jvm-1.11”,Scala 测试构建失败
- webrtc - WebRTC 需要时间将 OutboundRTPVideoStream 帧高度和帧宽度与 RTCInboundRTPVideoStream 匹配
- json - 解析器如何处理 json 数据
- javascript - FormGroup 中的 FormControl 更改为 FormControlName
- android - 伴随对象中的 Hilt 注入
- python-3.x - 有没有办法在一对多的表关系中“合并”一个子表?