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在的Tuple在Dictionary.
次要细节
这实际上是我正在做的聚类来从我的数据中获取结果.因为每个群集将具有Paper_Category与某些对象相关联的数量.我想要的是计算每个类别并将该集群存储为单个类别,即具有最高计数的类别.
如果eAuthor是一个列表,我必须检查Paper_Category所有eAuthors中的最高计数,并且每个eAuthor也可以包括几个Paper_Category,那么如何计算?
我如何计算每个值的存在Paper_Category并将其写为文本?
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)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |