我有一个10,000长值的列表,我想比较那些数据与100,000其他长值比较是一个按位操作 - >
if (a&b==a) count++;
Run Code Online (Sandbox Code Playgroud)
哪个算法可以用来获得最佳性能?
如果我正确理解你的问题,你想要检查a每个b谓词是否为真.所以对你的问题的一个天真的解决方案如下:
var result = aList.Sum(a => bList.Count(b => (a & b) == a));
Run Code Online (Sandbox Code Playgroud)
我不知道这真的可以加快对任意谓词,因为你不能避开检查每一个a对每个b.你可以尝试的是并行运行查询:
var result = aList.AsParallel().Sum(a => bList.Count(b => (a & b) == a));
Run Code Online (Sandbox Code Playgroud)
例:
aList:10,000个随机long值; bList:100,000个随机long值.
没有AsParallel:00:00:13.3945187
with AsParallel:00:00:03.8190386
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |