我在以下方面遇到一些问题: 我有一个大约有两千个名字的txt文件,其中有一堆重复的条目。我正在尝试创建将列出名称出现次数的内容。因此,例如: 约翰·杜48次 简·杜20次 等等
我在这里找到了有关如何计算的示例,但是我完全不知道如何将其输出到richTextbox或其他文件中。
.Select(s => new { Key = s.Key, Count = s.Count()})
.ToDictionary(d => d.Key, d => d.Count);```
答案 0 :(得分:1)
约翰·迪奥 约翰·迪欧 约翰·迪欧 约翰·威克 约翰·威克 测试中 测试
我已经将文件制作到名为names.txt的项目中,并在下面的代码中读取了他。
string[] lines = File.ReadAllLines("../../names.txt");
然后将名称分组并打印到控制台应用程序中。
var mylines = lines.GroupBy(g => g).Select(s => new { Name = s, Count = s.Count() });
foreach (var line in mylines)
{
Console.WriteLine($"{line.Name.Key} | {line.Count}");
}
John Deo | 11 约翰·威克| 2 测试5
答案 1 :(得分:0)
有很多不同的方法可以做到这一点。如果您只需要确定计数及其显示方式无关紧要,则可以将计数输出到CSV文件,然后使用Excel进行查看。在下面的简单示例中,我不知道您的姓名的格式如何,我假设每行一个名字。
class Program
{
static void Main(string[] args)
{
try
{
using (var reader = new StreamReader("names.txt"))
{
var names = GetNames(reader).ToLookup(k => k);
using (var writer = new StreamWriter("names.counted.csv"))
{
foreach (var name in names)
{
writer.WriteLine($"{name.Key},{name.Count()}");
}
}
}
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.ToString());
}
}
static IEnumerable<string> GetNames(TextReader reader)
{
string line;
while ((line = reader.ReadLine()) != null)
yield return line;
}
}
答案 2 :(得分:0)
假设我们已经将List<string>
对象中的文本文件的每一行都称为names
,并且文本文件中的每一行都代表正确拼写的完整名称。
使用LINQ,我们可以将这些值自己分组(类似于SQL),然后将IGrouping
结果转换为我们稍后在应用程序中要使用的对象。例如:
var totals = names.GroupBy(x => x)
.Select(group => new { Name = group.Key, Count = group.Count() });
foreach ( var total in totals )
{
Console.WriteLine($"{total.Name} | {total.Count} times");
}
另一种选择是使用您现有的代码,仅打印出字典的值
var totals = names
.Select(s => new { Key = s.Key, Count = s.Count()})
.ToDictionary(d => d.Key, d => d.Count);
foreach ( var kvp in totals )
{
Console.WriteLine($"{kvp.Key} | {kvp.Value} times");
}
如果要执行其他操作,然后打印到控制台,则只需将数据处理为所需的值即可。例如,如果您要将其保存到另一个文件:
var csvContent = totals
.Select(total => $"{total.Name},${total.Count} times")
.ToArray();
File.WriteAllLines(filePath, csvContent);
或者您可以创建一个字符串(例如,上面的String.Join("\n", csvContent)
)并更新RichTextBox like so
答案 3 :(得分:0)
您可以遍历查询结果,并将每个名称/计数添加到StringBuilder,然后将最终字符串输出到RichTextBox:
StringBuilder sb = new StringBuilder();
foreach(var KVP in yourDictionaryVariableName)
{
sb.AppendLine(KVP.Key + " | " + KVP.Value.ToString());
}
richTextBox1.Text = sb.ToString();