【ruby】【備忘録】ユーザをいくつかのグループに分ける・カウントする
備忘録
記事のタイトルと冒頭文のテストをする。
そのために、オブジェクト(ユーザ)を4つのグループに分けたい。
分け方に対する議論は一旦置いておいて、ひとまずidで順番にグループ分けをしてみる。
User = Struct.new(:id, :email, :test_pattern) users = 57.times.map do |i| User.new(i, "user#{i}", { title: i % 2, statement: (i % 4) / 2}) end # => [ # <struct User id=0, email="user0", test_pattern={:title=>0, :statement=>0}>, # <struct User id=1, email="user1", test_pattern={:title=>1, :statement=>0}>, # <struct User id=2, email="user2", test_pattern={:title=>0, :statement=>1}>, # <struct User id=3, email="user3", test_pattern={:title=>1, :statement=>1}>, # ... # <struct User id=56, email="user56", test_pattern={:title=>0, :statement=>0}> # ]
それぞれ何パターンずつ出力したのかカウントする
test_pattern_count = users.inject([]) do |array, user| array[user.test_pattern[:title]] ||= [] array[user.test_pattern[:title]][user.test_pattern[:statement]] ||= 0 array[user.test_pattern[:title]][user.test_pattern[:statement]] += 1 array end info = "パターン別カウント\n" test_pattern_count.each_with_index do |array, i| array.each_with_index do |count, j| info << "パターン#{i}_#{j}:#{count}\n" end end puts info # =>パターン別カウント # パターン0_0:15 # パターン0_1:14 # パターン1_0:14 # パターン1_1:14
これでとりあえず出来たけど、テストする箇所が増えたりパターンが増えたりすると、
結構描き直さないと対応できない。
ただテストのパターンはころころ変わるしテストしない期間もあるためこんなもん?