![]() |
1
116
我认为这是最可读的O(N)答案使用标准的LINQ。
编辑:咖啡豆说明
它在集合的每个元素上循环,并应用您提供的任何函数。
这里,我提供的函数是一个比较函数,它返回更大的值。
循环时,
所以,当聚合在整个集合上循环之后,它返回上次调用比较函数时的结果。然后我读了
这里有一种不同的方式来看待它[我不保证这是编译的;)]
|
![]() |
2
35
在阅读了各种建议之后,我决定对它们进行基准测试并分享结果。 测试代码:
结果:
这只是为了说明它们的相对性能。 如果你的优化“foreach”是最快的,但是linq是紧凑和灵活的。 |
![]() |
3
11
也许这不是Linq的一个好用途。我看到了使用LINQ解决方案对字典进行的2次完整扫描(1次获取最大值,然后另一次查找kvp以返回字符串)。 你可以用“老式”前臂一次完成:
|
![]() |
4
6
|
![]() |
5
1
您可以使用orderby(对于find min value)或orderbyDescending(对于max value)对字典进行排序,然后获取第一个元素。当您需要查找第二个max/min元素时,它也会有所帮助。 按最大值获取字典键:
按最小值获取字典键:
按第二个最大值获取字典键:
按秒最小值获取字典键:
|
![]() |
6
1
小扩展方法:
然后:
|
![]() |
7
0
如何使用interlocked.exchange进行并行操作以确保线程安全:)请记住,interlocked.exchange只能与引用类型一起工作。(即,结构或键值对(除非包装在类中)将无法保存最大值。 下面是我自己代码中的一个示例:
编辑(更新代码以避免上述可能的竞争条件): 这里有一个更健壮的模式,它也显示了并行选择一个最小值。我认为这解决了以下评论中提到的关于可能的比赛条件的问题:
|
![]() |
8
-4
我认为使用标准的LINQ库是最快的。 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 7 月前 |
|
Pavel Foltyn · 如何在C中生成逆字典# 9 月前 |
![]() |
ewok · 基于种子和上一个值创建值列表 1 年前 |
|
Vasu V · 将foreach转换为select语句 1 年前 |
![]() |
Modest · 使用命名空间和文本值序列化xElement 1 年前 |