我有一个文本文件,其中包含多行,其中许多是重复的。
我想描绘一个列表,其中出现最多的列表出现在顶部,最少出现在底部。
但是,我想显示字符串在列表中旁边显示的次数。
我将如何做到这一点?
答案 0 :(得分:0)
快速'n'简单的方法是使用Dictionary
和循环:
using(StreamReader sr = new StreamReader("my file")) {
Dictionary<string, int> items = new Dictionary<string, int>();
while(sr.BaseStream.Position < sr.BaseStream.Length) {
string s = sr.ReadLine();
if(items.ContainsKey(s)) {
items[s]++;
} else {
items.Add(s, 1);
}
}
// You now have a dictionary of unique strings and their counts - you can sort it however you need.
}
答案 1 :(得分:0)
如果文件不是太大,即,如果它可以放在内存中,你可以将它存储在字典中。
制作“文字行”字典 - &gt; “它被看到的次数”
一次读取一行文件。如果该行已在字典中,则将字典值增加1。如果该行是新的,请将其添加到字典中并将值设置为1。
读取整个文件后,您可以拉出键/值。按值排序以查找最常出现的值并打印结果。
答案 2 :(得分:0)
.NET Framework 3.0的代码:
using System;
using System.IO;
using System.Collections.Generic;
public class Program
{
private static int Compare(KeyValuePair<string, int> kv1, KeyValuePair<string, int> kv2)
{
return kv2.Value == kv1.Value ? kv1.Key.CompareTo(kv2.Key) : kv2.Value - kv1.Value;
}
public static void Main()
{
Dictionary<string, int> histogram = new Dictionary<string, int>();
using (StreamReader reader = new StreamReader("Test.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
if (histogram.ContainsKey(line))
++histogram[line];
else
histogram.Add(line, 1);
}
}
List<KeyValuePair<string, int>> sortedHistogram = new List<KeyValuePair<string, int>>(histogram);
sortedHistogram.Sort(Compare);
foreach (KeyValuePair<string, int> kv in sortedHistogram)
Console.WriteLine("{0}\t{1}", kv.Value, kv.Key);
}
}
Test.txt的:
ddd
aaa
ccc
bbb
aaa
aaa
bbb
输出:
3 aaa
2 bbb
1 ccc
1 ddd