【发布时间】:2012-11-10 20:56:03
【问题描述】:
我有一个字典,将字符串存储为键,将整数存储为表示单词及其出现次数的值。用户需要能够按使用次数或按字母顺序按第一个字母对它们进行排序。尽管我对它很陌生,但我更喜欢使用 LINQ。我已经能够使用以下代码根据起始字母对单词进行分组:
public string AlphabeticWordBuilder()
{
List<String> words = this.myWords.WordsAsList();
words.Sort();
return GroupWords(words);
}
private static string GroupWords(List<String> words)
{
String formatedWords = string.Empty;
var groups =
from w in words
group w by w.First();
foreach (var group in groups)
{
formatedWords += ("\n" + group.Key + ":\n");
foreach (var w in group)
{
formatedWords += (w);
}
}
return formatedWords;
}
但是,这种方法需要我将字典的键转换为列表,从而导致我丢失值。我应该能够以类似的方式按值对字典进行分组,但我不知道如何将键/值关系合并到用于字母排序的代码中。有人可以发布一个使用 LINQ 按值对字典进行分组的示例吗?
另外我想避免使用 LINQ 方法语法,如果可能的话,继续使用上面显示的 LINQ 查询表达式语法。
按字母顺序输出示例:
以a开头的单词:
和冒险一个(等)
按频率输出的示例:
单词出现 1 次:
问题和问题
我正在尝试做的一个不完整的例子:
public string FrecquincyWordBuilder()
{
string fromatedWords = string.Empty;
var groups =
from w in this.myWords
group w by w.value;
}
【问题讨论】:
-
由于您的实际意思似乎有些混乱,请提供一些示例数据 - 您拥有的数据的简要示例,以及您期望输出的样子,而不是添加更多解释关于它。
标签: c# linq dictionary group-by