Как выбрать все значения из массива или списка? - PullRequest
1 голос
/ 30 августа 2011

Я очень новичок в программировании, и мне интересно, как решить одну из самых основных проблем - "FizzBuzz".Я делаю это в Groovy.

У меня есть довольно конкретное представление о том, как я хочу, чтобы код создавался, но я не могу понять, как тестировать что-то для каждого значения вмассив.

Что я имею в виду, скажем, для каждого значения в списке [1,2,3,4], как бы я проверил, является ли каждое значение четным?Я знаю, что могу выбрать каждую конкретную точку в массиве, но это не то, что я хочу - я бы хотел сказать что-то вроде «если n% 2 = 0, пометьте это чётно».

Этоочень простой пример, но вы, вероятно, поняли идею.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

5 голосов
/ 30 августа 2011

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}
0 голосов
/ 30 августа 2011

Я бы сделал что-то вроде:

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' - основной способ сделать это.

...