有一个最常出现的3个单词的代码
string words = "One one Two two three four".ToLower();
var results = words
.Split(' ')
.Where(x => x.Length > 3)
.GroupBy(x => x)
.Select(x => new {
Count = x.Count(),
Word = x.Key })
.OrderByDescending(x => x.Count)
.Take(3);
foreach (var item in results)
{
MessageBox.Show(String.Format("{0} occurred {1} times", item.Word, item.Count));
}
它有效,但我想按一下按钮,并在MessageBox中显示所有结果:
答案 0 :(得分:1)
加入字符串然后只显示消息框一次:
MessageBox.Show(String.Join("\n", results.Select(x => String.Format("{0} occurred {1} times", x.Word, x.Count)));
或使用字符串插值:
MessageBox.Show(String.Join("\n",
results.Select(x => $"{x.Word} occurred {x.Count} times"));
答案 1 :(得分:1)
我的建议是构建要在foreach循环的消息框中显示的字符串,然后调用MessageBox.Show方法。 要获得换行符,您可以使用“\ n”或Environment.NewLine。 要构建字符串,您可以使用stringbuilder。
例如:
var stringBuilder = new System.Text.StringBuilder();
foreach (var item in results)
{
stringBuilder.Append($"{item.Word} occurred {item.Count} times");
stringBuilder.Append(Environment.NewLine);
}
MessageBox.Show(stringBuilder.ToString());
如果您从结果.ToList()
中列出一个列表,那么您可以将foreach写得更短:
var stringBuilder = new System.Text.StringBuilder();
results.ForEach(r => stringBuilder.Append($"{r.Word} occurred {r.Count} times{Environment.NewLine}"));
MessageBox.Show(stringBuilder.ToString());