我正在检查列表是否有一个元素,其源和目标已经在列表中.如果不是我将该元素添加到列表中.我是这样做的:
if (!objectToSerialize.elements
.Any(x => x.data.source == edgetoAdd.data.source &&
x.data.target == edgetoAdd.data.target))
objectToSerialize.elements.Add(edgetoAdd);
Run Code Online (Sandbox Code Playgroud)
这工作但非常缓慢.有没有办法让这部分更快?是否有更快的实施Any()或Count?提前致谢.
Mar*_*ell 10
您可以将数据预先索引HashSet<T>为某些内容T.由于您要比较两个值,因此元组可能会有所帮助:
var existingValues = new HashSet<(string,string)>(
objectToSerialize.elements.Select(x => (x.data.source, x.data.target)));
Run Code Online (Sandbox Code Playgroud)
现在你可以测试了
existingValues.Contains((edgetoAdd.data.source, edgetoAdd.data.target))
Run Code Online (Sandbox Code Playgroud)
有效率的.但!!建立索引不是免费的.如果您要测试很多值,这主要有帮助.如果你只是添加一个,线性搜索可能是你最好的选择.
请注意,您可以使用索引方法,索引持续多次Add调用,但.Add每次都需要记住索引.您可以使用.Addhashset上的返回值来快速测试/添加对:
if(existingValues.Add((edgetoAdd.data.source, edgetoAdd.data.target)))
{
// a new value, yay!
objectToSerialize.elements.Add(edgetoAdd);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |