计算特定字典键C#的值

mal*_*iks 1 c# dictionary tuples count

我必须在特定键上计算字典的值.我的代码是:

foreach (CurrentCluster curCluster in curClusters){
   twObjClus.WriteLine("Cluster_ID: {0} - Cluster_Size: {1} \n",  
   curCluster.GetClusterID(), curCluster.GetClusterSize());
   twObjClus.WriteLine("------------------------------------------------------------");
    foreach (EvoObject eEvoObject in curCluster.GetClusterObjects()){
        Author eAuthor = (Author)eEvoObject.GetOriginalObject(); 

        twObjClus.WriteLine("\n");
        twObjClus.WriteLine(@"Author_ID: {0}, Author_Name: {1} ",  
        eAuthor.AuthorID, eAuthor.AuthorName);
        twObjClus.WriteLine("----------------------------------------------------------");

        Dictionary<int, Tuple<int, int>> tPapers =  
        eAuthor.GetPapersBetweenYears(year, year + 1);
        List<int> tCoAuthors =  
        eAuthor.GetCoAuthorsBetweenYears(year, year + 1);
        List<int> tVenues = eAuthor.GetVenuesBetweenYears(year, year + 1);
        foreach (var kvpaper in tPapers){
           // Key is Paper_ID, Item1 is Paper_Category, Item2 is Year
           twObjClus.WriteLine("PaperID: {0}, PaperCategory: {1}, Year: {2}",  
           kvpaper.Key, kvpaper.Value.Item1, kvpaper.Value.Item2);
        }
        foreach (var kvCoAuthor in tCoAuthors){
           twObjClus.WriteLine("CoAuthorID: {0}", kvCoAuthor);
        }
        foreach (var kvVenue in tVenues){
           twObjClus.WriteLine("VenueID: {0}", kvVenue);
        }
    } 
    twObjClus.WriteLine("\n\n");
}
twObjClus.Flush();    twObjClus.Close();
Run Code Online (Sandbox Code Playgroud)

现在,我想在计算每个不同的值Paper_Category,即Item1在的TupleDictionary.

次要细节
这实际上是我正在做的聚类来从我的数据中获取结果.因为每个群集将具有Paper_Category与某些对象相关联的数量.我想要的是计算每个类别并将该集群存储为单个类别,即具有最高计数的类别.

如果eAuthor是一个列表,我必须检查Paper_Category所有eAuthors中的最高计数,并且每个eAuthor也可以包括几个Paper_Category,那么如何计算?

我如何计算每个值的存在Paper_Category并将其写为文本?

Tim*_*ter 5

var categoryGroups = tPapers.Values.GroupBy(t => t.Item1);

foreach(var g in categoryGroups)
    Console.WriteLine("Category:{0} Count:{1}", g.Key, g.Count());
Run Code Online (Sandbox Code Playgroud)

如何选择或存储具有最高计数的类别(即变量)?

var highestCount =  categoryGroups.OrderByDescending(g => g.Count())
     .Select(g => new { Category = g.Key, Count = g.Count() })
     .First();
Console.WriteLine("Category:{0} Count:{1}", highestCount.Category, highestCount.Count);
Run Code Online (Sandbox Code Playgroud)

由于您希望在所有作者中获得纸张类别计数,eAuthor并且似乎是您的类,请使用SelectMany:

var categoryGroups = eAuthor
    .SelectMany(a => a._Papers.Select(p => p._PaperCategory))
    .GroupBy(pc => pc);
// rest is same
Run Code Online (Sandbox Code Playgroud)