如何从数组或列表中选择所有值?

时间:2011-08-29 20:05:30

标签: arrays groovy selection fizzbuzz

我是编程的新手,我想知道如何解决其中一个最基本的问题 - “FizzBu​​zz”的事情。我在Groovy中这样做。

我对如何构建代码有一个非常具体的想法,但我不能为我的生活找出如何针对数组中的每个值进行测试。

我的意思是说,对于列表[1,2,3,4]中的每个值,我将如何检查每个值是否均匀?我知道我可以选择阵列中的每个特定点,但这不是我想要的 - 我希望能够说出“如果n%2 = 0,则标记为偶数。”

这是一个非常基本的例子,但你可能会得到这个想法。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

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}

答案 1 :(得分: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:奇数,2:偶数,3:奇数,4:偶数],你可以在'if else'语句中做任何你想做的事,但我想你问的是如何一次遍历集合一个成员,'each'闭包是执行此操作的主要方式。