【发布时间】:2019-09-27 16:17:24
【问题描述】:
所以我有一个 IEnumerable CallsForProperty 我需要找到特定时间段的前 3 个问题,所以我创建了 3 个字典
Dictionary<int, string> FAQfor3Months = null;
Dictionary<int, string> FAQfor4to12Months = null;
Dictionary<int, string> FAQfor12plusMonths = null;
foreach(Activity call in CallsForProperty){
if( /*call is in 3 months*/ ){
//do some unrelated stuff
FAQfor3Months.Add(counter, call.callQuestion)
counter++;
}
}
我有两个问题,
我正在尝试获取前 3 个最常见的问题,这个查询对吗?
var threeMonthFaqs = FAQfor3Months.GroupBy(x => x.Value).OrderByDescending(x => x.Count()).Take(3);
这也是低效的吗?有没有更好的方法来查询集合?
【问题讨论】:
-
有点难以辨别你到底想在这里做什么。这还引发了许多其他问题;例如,如果您有一个后备数据存储,您通常希望尝试直接对数据库执行此查询,而不是将所有数据加载到内存中。另外,您能否提供一些关于您希望这些字典包含什么内容的 cmets?您确定(在您的方法中)您不想要 Dictionary
,其中 Key 是问题,Value 是问题被问到的次数? -
你所做的绝对是你所要求的倒退。您不需要
Dictionary来存储问题,您可以只使用List<string>然后查询,但它会比Dictionary更有效,并在遇到问题时增加计数(即GroupBy+Count以后基本上会做什么)。此外,将变量初始化为null将不允许您使用它们。 -
是的,我想我试图缩短它太多,字典被填充了一个计数器作为索引和字符串问题作为值。我需要在特定时间范围内最常见的 3 个问题,所以我在每个时间范围内都制作了一本字典。
-
@Neovssmith 不,我明白你的代码在做什么,这只是完成你想要的事情的一种糟糕方式......
Dictionary对你没有任何帮助。
标签: c# linq dictionary