计算列表中每个键值对的组

时间:2018-05-30 12:21:05

标签: c#

我使用下面的代码从管道('|')分隔符分隔的文本文件中读取数据:

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将行的特定字段填充到列表中。 之后,填充数据我想计算每对的数量。键值对正在重复。

我该怎么做?

3 个答案:

答案 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();