我应该使用 .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
会更有效率。
我有一个散列数组,我想根据一个值将其分类为 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
会更有效率。