我有一个 10,000 长值的列表 我想将该数据与其他 100,000 个长值进行比较 比较是按位运算 -->
if (a&b==a) count++;
我可以使用哪种算法来获得最佳性能?
最佳答案
如果我对您的问题的理解正确,您想要针对每个 b
检查 a
是否某个谓词为真。因此,您的问题的天真解决方案如下:
var result = aList.Sum(a => bList.Count(b => (a & b) == a));
我不确定这是否真的可以针对任意谓词加速,因为您无法绕过检查每个 a
与每个 b
。您可以尝试并行运行查询:
var result = aList.AsParallel().Sum(a => bList.Count(b => (a & b) == a));
示例:
aList
:10,000 个随机 long
值; bList
:100,000 个随机 long
值。
没有
AsParallel
:00:00:13.3945187使用
AsParallel
:00:00:03.8190386
关于c# - 在 C# 中尽可能快地在大列表中按位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767673/