2

我对编程非常陌生,我想知道如何解决最基本的问题之一——“FizzBu​​zz”问题。我在 Groovy 中这样做。

我对如何构建代码有一个非常具体的想法,但我一生都无法弄清楚如何针对数组中的每个值进行测试。

我的意思是,对于列表 [1,2,3,4] 中的每个值,我将如何检查每个值是否是偶数?我知道我可以选择数组中的每个特定点,但这不是我想要的——我希望能够说诸如“如果 n%2=0,甚至标记这个”之类的话。

这是一个非常基本的例子,但你可能明白了。任何帮助将不胜感激。

4

2 回答 2

6

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}
于 2011-08-29T22:08:05.243 回答
0

我会做类似的事情:

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”语句中做任何你想做的事情,但我认为你要问的是如何迭代一次收集一个成员,“每个”闭包是执行此操作的主要方法。

于 2011-08-29T20:34:24.520 回答