我有两个数组,我想知道某些条件是否满足列表中的至少一对。
最低再现代码:
Dictionary<string, string>
此代码遍历所有对。但是一对就足够了。
有任何改进此代码的建议吗?
答案 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])