簡體   English   中英

列表中每個鍵值對的計數組

[英]Count group of each Key Value pair in a list

我正在使用下面的代碼從文本文件中讀取數據,該文本文件由管道('|')分隔符分隔:

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將行的特定字段填充到列表中。 之后,填充數據,我想計算每對的計數。 鍵值對重復。

我應該怎么做?

您可以使用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]);
}

您需要執行分組依據,然后執行投影以選擇計數。 請找到以下代碼:

var countList = KeyValue.GroupBy(c=>c.Key).Select(g=> new { g.Key,g.Count()}.ToList();

希望能幫助到你!

這將創建不同鍵/值對的列表,並在主列表中顯示它們的數量:

var resultList = KeyValue.GroupBy(p => new { p.Key, p.Value })
.Select(g => new{
    KeyValuePair = g.Key,
    Count = g.Count() }).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM