我有一个字典字符串(键)和值字符串列表。我希望能够打印出//列表的内容(而不是获取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);
}
}
答案 0 :(得分:0)
创建字典的一种更简洁的方法是在列表上使用GroupBy
,以单词的字符串表示形式对项目进行分组,其中所有字符都用'-'
替换,等于letter
(我们通过使用Select
方法来选择'-'
或'a'
字符来创建,然后使用{{1} }),然后使用string.Concat
,将Dictionary<string, List<string>>
用于字典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));
}
输出