sort_by
がここで使用するための自然な方法ですが、私はそれがキー:name
の値をソートする方法と比較する方法を興味があったし、その後にハッシュを抽出するためにvalues_at
を使用を参照してください。正しい順序(配列を最初にハッシュに変換する必要があります)。
def sort_by_method(names_array)
names_array.sort_by { |hash| hash[:name] }
end
def values_at_method(names_array)
h = names_array.each_with_object({}) { |g,h| h[g[:name]] = g }
h.values_at *h.keys.sort
end
require 'fruity'
ALPHA = ('a'..'z').to_a
def bench_em(size, name_size)
names_array = size.times.map { { a: 1, name: ALPHA.sample(name_size).join, c: 2 } }
compare do
_sort_by { sort_by_method names_array }
_values_at { values_at_method names_array }
end
end
bench_em(100, 10)
Running each test 64 times. Test will take about 1 second.
_sort_by is similar to _values_at
bench_em(1_000, 10)
Running each test 4 times. Test will take about 1 second.
_values_at is similar to _sort_by
bench_em(10_000, 10)
Running each test once. Test will take about 1 second.
_sort_by is similar to _values_at
bench_em(100_000, 10)
Running each test once. Test will take about 8 seconds.
_sort_by is similar to _values_at
パフォーマンスがほぼ同じである表示されますので、より簡単で、より良い読みsort_by
が、ここでは最良の選択であるように思われます。