我有一个
Lookup<TKey, TElement>
其中TElement引用一串单词。我想转换 查询:
Dictionary<int ,string []> or List<List<string>> ?
我已经阅读了一些关于使用
的文章Lookup<TKey, TElement>
但这还不足以让我理解。提前致谢。
答案 0 :(得分:11)
您可以使用以下方法执行此操作:
假设您有Lookup<int, string>
名为mylookup
且字符串包含多个字词,那么您可以将IGrouping
值放入string[]
并将整个内容打包到字典:
var mydict = mylookup.ToDictionary(x => x.Key, x => x.ToArray());
<强>更新强>
阅读完您的评论后,我知道您的查询实际上要做什么(请参阅操作previous question)。您不必将其转换为字典或列表。只需直接使用查找:
var wordlist = " aa bb cc ccc ddd ddd aa ";
var lookup = wordlist.Trim().Split().Distinct().ToLookup(word => word.Length);
foreach (var grouping in lookup.OrderBy(x => x.Key))
{
// grouping.Key contains the word length of the group
Console.WriteLine("Words with length {0}:", grouping.Key);
foreach (var word in grouping.OrderBy(x => x))
{
// do something with every word in the group
Console.WriteLine(word);
}
}
此外,如果订单很重要,您始终可以通过IEnumerable
或OrderBy
扩展程序对OrderByDescending
进行排序。
修改强>
查看上面编辑过的代码示例:如果要订购密钥,只需使用OrderBy
方法即可。您可以使用grouping.OrderBy(x => x)
按字母顺序排序单词。
答案 1 :(得分:4)
查找是从键到值集合的映射的集合。给定一个键,您可以获得相关值的集合:
TKey key;
Lookup<TKey, TValue> lookup;
IEnumerable<TValue> values = lookup[key];
在实现IEnumerable<IGrouping<TKey, TValue>>
时,您可以使用可枚举的扩展方法将其转换为所需的结构:
Lookup<int, string> lookup = //whatever
Dictionary<int,string[]> dict = lookup.ToDictionary(grp => grp.Key, grp => grp.ToArray());
List<List<string>> lists = lookup.Select(grp => grp.ToList()).ToList();