在groovy中map.every和map.any有什么区别?

nic*_* m. 1 methods groovy map

我只是想问一下这两种方法的主要区别.当groovy API说谓词时,它意味着什么?

Fra*_*itt 6

简短说明:

  • 谓词是一个返回布尔值的函数/表达式

  • 仅当谓词对所有元素求值为true时,map.every才返回true

  • 如果谓词对于至少一个元素的计算结果为true,则map.any返回true

示例(伪代码):

a = [1,2,3,4,5]
a.every { |x| x < 3 } => false, since 3,4 and 5 are not smaller than 3
a.any   { |x| x < 3 } => true, since 1 and 2 are smaller than 3
Run Code Online (Sandbox Code Playgroud)

  • @simon术语谓词用于定义[根据其参数返回true或false的函数](http://en.wikipedia.org/wiki/Predicate_%28mathematical_logic%29#Simplified_overview)不是一个新术语......它已经存在了很长一段时间;-) (3认同)

tim*_*tes 5

如果您阅读文档;

Map.any说

迭代映射的条目,并检查谓词是否对至少一个条目有效

Wheras Map.every说

迭代映射的条目,并检查谓词是否对所有条目有效.

通过谓词,它意味着它通过闭包运行条目并检查Groovy Truthiness的结果

示例(使用Map将Frank的伪代码扩展为实际的groovy代码):

a = [a:1,b:2,c:3,d:4]
assert a.every { key, value -> value < 3 } == false // since 3 and 4 are not smaller than 3
assert a.any   { key, value -> value < 3 } == true  // since 1 and 2 are smaller than 3
Run Code Online (Sandbox Code Playgroud)