给出如下数据结构:
[
[
"1",
{
:user_uid=>"1",
:display_name=>"joe",
:country_code=>"ITA",
# more attributes
}
],
# more users
]
我可以获得所有country_code
属性的唯一列表,如下所示:
users.map do |uid, attributes|
attributes[:country_code]
end.uniq
但如果我有一个非常大的数据集,这仍然会遍历每个用户(正如Ajedi32指出的那样,当然是这种情况)。
是否有更有效的方法来收集这些数据?
答案 0 :(得分:1)
对于1个用户,当我比较每个方法运行500次所花费的时间时,我发现以下速度比uniq
快。可以帮到你。
begin
array = []
users.each do |_, attributes|
array |= [attributes[:country_code]]
# http://www.ruby-doc.org/core-2.2.0/Array.html#method-i-7C
end
array
end
答案 1 :(得分:1)
我建议:
require 'set`
users.each_with_object(Set.new) { |(_, attributes),s|
s << attributes[:country_code] }.to_a