吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2973|回复: 13
收起左侧

[其他转载] C#分享一种比list循环快的方法ToDictionary

[复制链接]
liu8359 发表于 2020-12-10 15:49
本帖最后由 liu8359 于 2020-12-10 16:05 编辑

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

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



实体
[C#] 纯文本查看 复制代码
    public class Model
    {
        public string ID { get; set; }

        public string Name { get; set; }

        public int Level { get; set; }
    }


list  -> Dictionary -> for循环找到传入key值model
[C#] 纯文本查看 复制代码
    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 [key];


还有更快的C#循环方法吗

免费评分

参与人数 2吾爱币 +3 热心值 +2 收起 理由
迷恋自留地 + 1 我很赞同!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

免费评分

参与人数 1热心值 +1 收起 理由
Cool_Breeze + 1 我很赞同!

查看全部评分

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

参考

参考

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
newpowersky + 1 + 1 用心讨论,共获提升!

查看全部评分

万神fake 发表于 2020-12-10 16:14
 楼主| liu8359 发表于 2020-12-10 16:28
万神fake 发表于 2020-12-10 16:14
能少写一一句就少写一句

哈哈,复制就行
头像被屏蔽
seed 发表于 2020-12-10 16:52
提示: 作者被禁止或删除 内容自动屏蔽
Mystery丶 发表于 2020-12-10 17:00
我基本没使用字典,提供新的思路了
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()不就可以了?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 18:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表