Rubyでの配列フィルタリング

1332 ワード

Step:1次の配列があります

    * >>  name = %w{ zhangsan lisi wangwu zhaoliu galeki lyanry liulanger xiaosl tom nick bara}
    * => ["zhangsan","lisi","wangwu","zhaoliu","lyanry","liulanger","xiaosl","tom","nick","bara" ]


もし私たちが今4文字の名前を選んだら、どうすればいいですか?
他の言語のように、forループを書いて、各項目を遍歴して、長さが4なら選んでください.
rubyはもっと良い方法があります.1行だけ必要です.

    * >>  name.find_all{|n| n.length == 4}
    * => ["lisi", "nick", "bara"]


find_all法は後続のblockと組み合わせて,条件に合致する配列項を簡潔明瞭にスクリーニングした.配列からアイテムを削除する場合は、rejectメソッドを使用します.

    * >>  name.reject{|n| n.length == 4}
    * => ["zhangsan", "wangwu", "zhaoliu", "galeki", "lyanry", "liulanger", "xiaosl", "tom"]

blockでは、複数の条件を再結合することもできます.

    * >>  name.find_all{|n| n.length>3 && n.length <8 && n[0,1] == "z"}
    * => ["zhaoliu"]


以上の文は配列の中から長さが3より大きくて、8より小さくて、しかも頭文字がzの名前で、依然として簡潔で明瞭で、効率の要素を無視して、私達はrubyの中の配列をデータベースとして照会することができます