我有两个对象模型集合,我正在针对每个属性比较它们的不平等性。
ObservableCollection<LayerModel> SourceDrawingLayers
...和:
ObservableCollection<LayerModel> TargetDrawingLayers
我在一般情况下创建非等分LINQ查询方面收到了很好的建议,并使其在我的应用程序中发挥了很大作用,但是现在我想加快它:
var onOffQuery = from target in TargetDrawingLayers
from source in SourceDrawingLayers
where target.Name == source.Name && target.OnOff != source.OnOff
select target;
我的理解是我将查询乘以源图形*
中的项目数 *
中填充到TargetDrawingLayers
中的目标图形数。
我想使用Join
加快此操作的速度,但是我在其中的!=
部分遇到了问题。
我玩这个:
var newQuery = from source in SourceDrawingLayers
join target in TargetDrawingLayers
on target.name
where target.OnOff != source.OnOff
select target;
但是我在语法上苦苦挣扎。有人可以让我走上正确的路吗?
另外,这甚至会带来明显的性能提升吗?
参考方案
将on target.name
替换为on source.name equals target.name
var newQuery = from source in SourceDrawingLayers
join target in TargetDrawingLayers
on source.name equals target.name
where target.OnOff != source.OnOff
select target;
在Linq-to-objects中,联接将在联接属性上创建Lookup<TKey,TElement>
,这将在匹配source
和target
时提高性能。假设此结果是在有限的结果集上得出的,它应该可以使原始代码有所改善。当然,如果由于name
两端都包含非常有限的值范围而导致许多匹配,则性能根本不会受到太大影响。
作为参考,请参见juharr在下面的注释中提供的the link to the Enumerable.cs源代码。
LeetCode题解494.target-sum题目地址 https://leetcode.com/problems/target-sum/description/ 题目描述 You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -. For…
使用-source 8或更高版本来启用lambda表达式[重复] - javaThis question already has answers here: Specifying java version in maven - differences between properties and compiler plugin (3个答案) 去年关闭。 当我尝试运行Maven构建时遇到构建错误。我创建了一个包含lambda函数的简单J…
LeetCode题解计算机为什么是基于二进制的?可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制
LeetCode题解统计城市的所有灯泡这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…
LeetCode题解黑白圆盘一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可