我使用下面的代码从管道('|')分隔符分隔的文本文件中读取数据:
class Data
{
public string Key { get; set; }
public string Value { get; set; }
}
using(TextFieldParser csvReader = new TextFieldParser(TEXT_FILE_PATH + ReadFile + ".txt"))
{
csvReader.SetDelimiters(new string[] { FILE_DELIMETER });
csvReader.HasFieldsEnclosedInQuotes = true;
List<Data> KeyValue = new List<Data>();
while (!csvReader.EndOfData)
{
string[] fields = csvReader.ReadFields();
if ( fields[7] != ""
&& fields[8] != ""
&& fields[7] != string.Empty
&& fields[8] != string.Empty)
KeyValue.Add(new Data { Key = fields[7], Value = fields[8] });
}
}
首先,我使用KeyValue Pair将行的特定字段填充到列表中。 之后,填充数据我想计算每对的数量。键值对正在重复。
我该怎么做?
答案 0 :(得分:4)
您可以使用LINQ。例如,如果要将结果存储在字典中,其中键是键和值的组合,值是重复的计数:
Dictionary<Tuple<string, string>, int> keyValueCounts = KeyValue
.GroupBy(x => Tuple.Create(x.Key, x.Value))
.ToDictionary(g => g.Key, g => g.Count());
请您帮我读一下Dictionary中的数据 对象以优化的方式
如果您想要枚举列表中的所有项目,则可以输出结果:
foreach (Data d in KeyValue)
{
Tuple<string, string> keyval = Tuple.Create(d.Key, d.Value);
Console.WriteLine("Data:{0} Count:{1}", keyval, keyValueCounts[keyval]);
}
答案 1 :(得分:1)
您需要执行分组,然后执行投影以选择计数。请找到以下代码:
{{1}}
希望它有所帮助!
答案 2 :(得分:1)
这将创建不同键值对的列表及其在主列表中的外观计数:
var resultList = KeyValue.GroupBy(p => new { p.Key, p.Value })
.Select(g => new{
KeyValuePair = g.Key,
Count = g.Count() }).ToList();