Hatena::Grouprubyist

Going My Ruby Way このページをアンテナに追加 RSSフィード

Ruby ロゴ (C) Ruby Association LLC

2012年04月03日(火)

Array#zip

| 19:03 | Array#zip - Going My Ruby Way を含むブックマーク はてなブックマーク - Array#zip - Going My Ruby Way Array#zip - Going My Ruby Way のブックマークコメント

Array#zip のメモです。

普通、こう使います。

[:a,:b,:c].zip([1,2,3])       # => [[:a, 1], [:b, 2], [:c, 3]]

[:a,:b].zip([1,2],["x","y"])  # =>  [[:a, 1, "x"], [:b, 2, "y"]]

zip は引数が必須と思い込んでたんですが、引数がない場合以下のようになりました。

[:a,:b,:c].zip                # => [[:a], [:b], [:c]]

引数に空配列を渡すと以下のようになります。

[:a,:b,:c].zip([])            # => [[:a, nil], [:b, nil], [:c, nil]]

FizzBuzz その2

| 18:49 | FizzBuzz その2 - Going My Ruby Way を含むブックマーク はてなブックマーク - FizzBuzz その2 - Going My Ruby Way FizzBuzz その2 - Going My Ruby Way のブックマークコメント

FizzBuzz について、その2。

新案。この方が素直?

gen = -> s,n { -> count { s if count % n == 0 } }  # 構文は Ruby1.9
fizz = gen['Fizz', 3]
buzz = gen['Buzz', 5]
ans = (1..100).map {|n| "#{fizz[n]}#{buzz[n]}".sub(/^$/) { n } }

オープンクラスででも、できなくはない。

class Numeric
  def fizzbuzz ; 'FizzBuzz' if self % 15 == 0 ; end
  def fizz     ; 'Fizz'     if self %  3 == 0 ; end
  def buzz     ; 'Buzz'     if self %  5 == 0 ; end
end

ans = (1..100).map {|n| n.fizzbuzz || n.fizz || n.buzz || n }

前の日記

何故か、前は一つの式にまとめるのにこだわってたようです。