最後の数字だけ違う文字列をグループ分けしたかったんですが、自分で書いてみるとこんな面倒くさい感じになって (´・ω・`)ショボーン
a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2)
a2 = a1.map{|v| v.sub(/[0-9]$/,"")}.uniq
tmp = Array.new(a2.size)
a2.each_with_index do |v2, i|
a1.each do |v1|
if v1.sub(/[0-9]$/, "") == v2
tmp[i].nil? ? tmp[i] = [v1] : tmp[i].push(v1)
end
end
end
p tmp # => [["foo1", "foo2", "foo3"], ["bar1", "bar3"], ["buz2"]]なので、調べてみたら非常に簡単な方法が見つかりました。
a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2)
p a1.group_by{|x| x[/[a-zA-Z]+/] }.valuesRubyすげぇ!
参考
[arrays – Group strings with similar pattern in Ruby – Stack Overflow][1]