😸

Grow.rbのmy_partition問題を解いてみる

2024/12/26に公開

Grow.rbとは:

Ruby力を高めたいRubyistたちが、コードを書いたりちょっとマニアックな内容を学んだりするコミュニティです。

オリジナルのmy_partitionメソッドを作ってみようというテーマです。

Enumerable#partitionとは:

各要素を、ブロックの条件を満たす要素と満たさない要素に分割します。各要素に対してブロックを評価して、その値が真であった要素の配列と、偽であった要素の配列の 2 つを配列に入れて返します。
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/partition.html

テストコードはこちら。
https://github.com/grow-rb/enumerable-exercises/blob/d08568e5319c9d24a74c9cb635ed1115ad43adc3/partition/partition_test.rb#L1-L8

書いた回答がこちら。eachのみを使う縛り。

module Enumerable
  def my_partition
    result = []
    true_array = []
    false_array = []
    each do |i|
      if yield(i)
        true_array << i
      else
        false_array << i
      end
    end
    result.push(true_array, false_array)
  end
end

each_with_objectを使うと変数を減らせる。

module Enumerable
  def my_partition
    each_with_object([[], []]) do |i, (true_array, false_array)|
      if yield(i)
        true_array << i
      else
        false_array << i
      end
    end
  end
end

実務でpartitionを使ったことがないので面白かった。

Discussion