我应该使用 .select 还是 .each 将哈希数组排序为 3 个单独的数组? (Ruby)

Should I use .select or .each to sort array of hashes into 3 separate arrays? (Ruby)

我有一个散列数组,我想根据一个值将其分类为 3 个单独的数组。

有两种明显的方法可以做到这一点。

arr1 = orig_array.select { |h| h[:category] == 1 }
arr2 = orig_array.select { |h| h[:category] == 2 }
arr3 = orig_array.select { |h| h[:category] == 3 }

arr1 = [], arr2 = [], arr3 = []

arr.each do |h|
  if h[:category] == 1
    arr1 << h
  elsif h[:category] == 2
    arr2 << h
  elsif h[:category] == 3
    arr3 << h
  end
end

最初似乎是第二种方法,虽然更冗长,但性能更高,因为它只循环一次原始数组。但是,我想知道 Ruby 后端是否有一些优化实际上可以使内置的 .select 方法更快并且可能更有效地利用资源,即使在算法上它的效率较低。

有什么见解吗?

你可以试试 #group_by:

orig_array.group_by { |h| h[:category] }

这将 return 一个散列,其中键是类别,值是具有该类别的所有数组元素。

我同意你发布的两种方法,#each 会更有效率。