C# dictionary 遍历性能分析

1. 遍历性能,如果想通过遍历获取Dictionary 的键值对,方法有两种

 方法 一

       /// <summary>
        /// 通过key 访问键值对
        /// </summary>
        private static  void keyPerformance(Dictionary<string,string> dic)
        {
            DateTime start = DateTime.Now;
            string val = string.Empty;
            string key = string.Empty;
            foreach (string item in dic.Keys)
            {
                key = item;
                val = dic[item];
            }
            DateTime end = DateTime.Now;
            TimeSpan span = end.Subtract(start);
            Console.WriteLine(" foreach keys spend time:{0}",span.TotalMilliseconds);
        }

 方法 二  性能最佳 推荐使用

        /// <summary>
        /// 通过 KeyValuePair 访问键值对(推荐使用)
        /// </summary>
        /// <param name="dic"></param>
        private static void keyValPerformance(Dictionary<string , string> dic)
        {
            DateTime start = DateTime.Now;
            string val = string.Empty;
            string key = string.Empty;
            foreach (KeyValuePair<string ,string> item in dic)
            {
                key = item.Key;
                val = item.Value;
            }
            DateTime end = DateTime.Now;
            TimeSpan span = end.Subtract(start);

            Console.WriteLine(" foreach keyVals spend time:{0}", span.TotalMilliseconds);
        }

 以下是耗时对比

耗时: keys集合遍历 > keyvaluePair遍历

2. 其它遍历

如果获取 dictionary 中的key 推荐 方法一

耗时: keyvalPair 遍历 >keys 集合遍历

如果获取 dictionary 中的value 推荐如下方法

    private static void valPerformance(Dictionary<string , string> dic)
        {
            DateTime start = DateTime.Now;
            string val = "";
            foreach (string  item in dic.Values)
            {
                val = item.value;
            }
            DateTime end = DateTime.Now;
            TimeSpan span = end.Subtract(start);
            Console.WriteLine(" foreach vals spend time:{0}", span.TotalMilliseconds);
        }
 

耗时: keyValPair 遍历 > values 集合遍历

### 遍历C#字典的方法 在C#中,`Dictionary<TKey, TValue>` 是一种常用的数据结构,用于存储键值对集合。为了有效地遍历字典中的项,可以采用多种方法。 #### 使用 `foreach` 循环 最常见的方式是利用 `foreach` 循环来迭代字典中的每一个条目: ```csharp var dictionary = new Dictionary<string, int> { { "one", 1 }, { "two", 2 } }; foreach (KeyValuePair<string, int> pair in dictionary) { Console.WriteLine($"Key: {pair.Key}, Value: {pair.Value}"); } ``` 这种方法简单直观,并且能够访问到每一对键和对应的值[^1]。 #### 获取键或值得集合并进行遍历 如果只需要操作所有的键或者全部的值,则可以直接获取这些部分作为独立序列来进行处理: ```csharp // 取得所有key foreach (string key in dictionary.Keys) { Console.WriteLine(key); } // 或者取得所有value foreach (int value in dictionary.Values) { Console.WriteLine(value); } ``` 这种方式提高了灵活性,在某些场景下可能更加方便。 #### LINQ查询表达式 对于更复杂的筛选条件或是需要转换数据的情况,LINQ 提供了一种优雅的选择: ```csharp using System.Linq; var filteredItems = from item in dictionary where item.Value > 0 select item; foreach (var item in filteredItems) { Console.WriteLine($"{item.Key}: {item.Value}"); } ``` 此代码片段展示了如何通过LINQ语句过滤特定范围内的项目。 #### 最佳实践建议 当涉及到性能优化时,应该注意以下几点: - 尽量减少不必要的枚举次数; - 如果仅需读取而无需修改内容的话,考虑使用只读视图如 `ReadOnlyDictionary<TKey,TValue>`; - 对于大型字典对象的操作应评估其效率影响;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值