liu8359 发表于 2020-12-10 15:49

C#分享一种比list循环快的方法ToDictionary

本帖最后由 liu8359 于 2020-12-10 16:05 编辑

只有数据量大时才会有效果(几万条以上)

C#list循环时由于数据量太大,循环起来太慢了。
把list转成Dictionary(字典)后循环,效率会提升很快。


实体

    public class Model
    {
      public string ID { get; set; }

      public string Name { get; set; }

      public int Level { get; set; }
    }


list-> Dictionary -> for循环找到传入key值model

    List<Model> list = new List<Model>();
    Dictionary<string, Model> listDic = list.ToDictionary(t => t.ID);
   var model = new Model();
   if (listDic .Keys.Contains(key))
         model = listDic ;


还有更快的C#循环方法吗{:301_982:}

flyer_2001 发表于 2021-4-10 00:59

如果是需要经常用到查询,建议直接使用Dictionary,这样处理速度要比list快的多
list的复杂度为O(n),Dictionary使用hash,为O(1)。
使用List,再去转Dictionary,如楼上测试结果,估计时间都花在了转换时间上,没有必要多此一举。

kaisame 发表于 2021-4-9 18:45

我写了测试代码List中存在5000条字符串,直接用List.Find()查找只需要0.4ms,而你这种还需要把list数据转换为字典然后再取值,大量字典转换更浪费时间

万神fake 发表于 2020-12-10 16:14

能少写一一句就少写一句:lol

liu8359 发表于 2020-12-10 16:28

万神fake 发表于 2020-12-10 16:14
能少写一一句就少写一句

哈哈,复制就行

seed 发表于 2020-12-10 16:52

Mystery丶 发表于 2020-12-10 17:00

{:1_893:}我基本没使用字典,提供新的思路了

yunruifuzhu 发表于 2020-12-10 17:16

数组最快,unsafe 指针操作 飞上天

xyz2000cn007 发表于 2020-12-10 18:45

厉害,楼主,感谢分享

wuguiliang 发表于 2021-4-6 13:19

厉害,楼主,感谢分享!!学到了

lanwd 发表于 2021-4-6 15:37

是很好的思路,谢谢楼主分享

kaisame 发表于 2021-4-9 18:35

这个并不是循环呀,对于List直接进行find()不就可以了?
页: [1] 2
查看完整版本: C#分享一种比list循环快的方法ToDictionary