名前が悪い
どういうgemか
こういう処理をしてくれる Array#full_join
を提供する
Hoge = Struct.new(:id, keyword_init: true) array1 = [Hoge.new(id: 1), Hoge.new(id: 2), Hoge.new(id: 3)] array2 = [Hoge.new(id: 2), Hoge.new(id: 3), Hoge.new(id: 4)] array1.full_join(array2) #=> [ # [#<struct Hoge id=1>, nil] # [#<struct Hoge id=2>, #<struct Hoge id=2>] # [#<struct Hoge id=3>, #<struct Hoge id=3>] # [nil, #<struct Hoge id=4>] #]
こんな使い方もできる
Hoge = Struct.new(:id, :name, keyword_init: true) Fuga = Struct.new(:id, :name, keyword_init: true) array1 = [ Hoge.new(id: 1, name: "AAA"), Hoge.new(id: 2, name: "BBB"), Hoge.new(id: 3, name: "CCC") ] array2 = [ Fuga.new(id: 101, name: "BBB"), Fuga.new(id: 102, name: "CCC"), Fuga.new(id: 103, name: "DDD") ] array1.full_join(array2, &:name) #=> [ # [#<struct Hoge id=1, name="AAA">, nil], # [#<struct Hoge id=2, name="BBB">, #<struct Fuga id=101, name="BBB">], # [#<struct Hoge id=3, name="CCC">, #<struct Fuga id=102, name="CCC">], # [nil, #<struct Fuga id=103, name="DDD">] #]
ようはFull Outer Joinみたいなまとめ方をしつつArray#zipするようなメソッドを追加してくれる
業務のコードを書くときにこれと同じ動きしてほしい*1、という場面に数回ぶつかったのでgemを作っちゃった
名前が悪い
最初は「こういうのってなんていう名前の配列操作なんだろう」と悩んで自分なりに検索したけど見つからなかった
どう形容すべきか分からなかったし、full_joinって名前もこの操作にピッタリあっているとは思えない
*1:とあるワードごとのモデルの対応表を作ることになっている