2

私はプログラミングにとても慣れていないので、そこにある最も基本的な問題の1つである「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'ステートメント内で好きなことを行うことができますが、あなたが求めているのは、一度に1つのメンバーを収集する場合、「各」クロージャーがこれを行うための主要な方法です。

于 2011-08-29T20:34:24.520 に答える