【问题标题】:Fastest way to count a collection whilst applying criteria在应用条件时计算集合的最快方法
【发布时间】:2011-02-25 12:21:31
【问题描述】:

我有一个字典,我已经从数据库中加载了一个字典,其中包含一个客户对象键和一个状态值,它是一个枚举。我想做的是计算字典中所有具有某种枚举类型状态的项目,即“已发送”。在不返回数据库的情况下解决此问题的最佳方法是什么,或者我必须返回数据库?我真的不想循环整个系列。我不能使用 linq,因为我目前使用的是 .Net 2.0

public Dictionary<Customer, Status> DistributionList

非常感谢。

【问题讨论】:

  • 您必须编写循环或使用 LINQ。请记住,无论如何,编写循环将是最快的方法——肯定比查询数据库更快。

标签: .net collections dictionary count


【解决方案1】:

如果您需要字典中具有特定值的元素计数,则无法避免循环遍历列表:

int count = 0;
foreach(KeyValuePair<Customer,Status> kvp in DistributionList) {
    if(kvp.Value == Status.Sent) count++;
}

【讨论】:

    【解决方案2】:

    你可以使用 lambda 函数吗?例如:

    using System.Linq;
    
    int sentCount = DistributionList.Values.Count(s => s.Status == sent);
    

    【讨论】:

    • 嗨乔恩,不能使用我的问题中所述的 linq。
    • 哎呀,公平点!在那种情况下,我可能会通过遍历 DistributionList.Values 来简化 fencliff a bif 的答案,因为这些是状态,而不是在 KVP 上循环。
    猜你喜欢
    • 2013-11-27
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多