我对编程非常陌生,我想知道如何解决最基本的问题之一——“FizzBuzz”问题。我在 Groovy 中这样做。
我对如何构建代码有一个非常具体的想法,但我一生都无法弄清楚如何针对数组中的每个值进行测试。
我的意思是,对于列表 [1,2,3,4] 中的每个值,我将如何检查每个值是否是偶数?我知道我可以选择数组中的每个特定点,但这不是我想要的——我希望能够说诸如“如果 n%2=0,甚至标记这个”之类的话。
这是一个非常基本的例子,但你可能明白了。任何帮助将不胜感激。
Groovy 允许您使用函数式方法解决这个问题。通过应用映射转换,您可以生成包含数字以及它是偶数还是奇数的对列表。
所有 groovy 列表都有一个方法collect
,用于在每个元素上映射闭包。返回值是一个列表,其中包含在每个元素上调用闭包的结果。例如:
[1, 2, 3, 4].collect {
[it, it % 2 ? 'odd' : 'even']
}
===> [[1:odd], [2:even], [3:odd], [4:even]]
这会产生一个对列表(实际上是 2 个元素列表)。希望结果是一个映射而不是一个列表是很常见的,并且 groovy 有一个专门的版本,专门为此collect
调用。collectEntries
这是返回地图的替代方案:
[1, 2, 3, 4].collectEntries {
[it, it % 2 ? 'odd' : 'even']
}
===> {1=odd, 2=even, 3=odd, 4=even}
我会做类似的事情:
def list = [1, 2, 3, 4]
def map = [:]
list.each {
if (it % 2 == 0)
map.putAt(it, "even")
else
map.putAt(it, "odd")
}
println map
这将打印:[1:odd, 2:even, 3:odd, 4:even],你可以在“if else”语句中做任何你想做的事情,但我认为你要问的是如何迭代一次收集一个成员,“每个”闭包是执行此操作的主要方法。