C#LINQ Zip:找到至少一对

时间:2016-07-15 20:57:57

标签: c# linq

我有两个数组,我想知道某些条件是否满足列表中的至少一对

最低再现代码:

Dictionary<string, string>

此代码遍历所有对。但是一对就足够了。

有任何改进此代码的建议吗?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

bool hasBigAppleBox = 
    boxTypes.Zip(boxSizes,
                 (type, size) => type == "Apple" && size >= bigBoxSize)
            .Any(x => x);

基本上,对于每对,此代码选择该对的条件结果。这个(Zip方法)返回IEnumerable<bool>。当Any(x => x)遇到可枚举中的第一个true时,它将返回true。

答案 1 :(得分:2)

简答:使用Sum()

答案很长:您使用Any()将评估整个集合,使用true只会评估,直到满足第一个boxTypes.Zip(boxSizes, (type, size) => (type == "Apple" && size >= bigBoxSize) ? 1 : 0) .Any(result => result == 1) 条件。

示例:

(type == "Apple" && size >= bigBoxSize) ? 1 : 0

值得注意的是,在这种情况下,您的type == "Apple" && size >= bigBoxSize)谓词可以简化为boxTypes.Zip(boxSizes, (type, size) => type == "Apple" && size >= bigBoxSize) .Any()

有了这个,你的陈述就变成了:

>>> Aval[np.searchsorted(A, A2[np.nonzero(np.in1d(A2, A))[0]])]
array([10, 35, 10, 35, 40, 40, 40, 45])