【发布时间】:2020-07-06 20:09:50
【问题描述】:
我有一个这样的嵌套哈希
Aranea={
"Aranéomorphes"=>{
"Agelenidae"=>[80,1327],
"Amaurobiidae"=>[49,270],
"Ammoxenidae"=>[4,18],
"Anapidae"=>[58,233],
"Anyphaenidae"=>[56,572],
"Araneidae"=>[175,3074],
"Archaeidae"=>[5,90],
"Arkydiae"=>[2,38],
"Austrochilidae"=>[3,10],
"Caponiidae"=>[18,119],
"Cheiracanthiidae"=>[12,353],
"Cithaeronidae"=>[2,8],
"Clubionidae"=>[16,639],
"Corinnidae"=>[68,489],
"Ctenidae"=>[48,519],......
对于每个键(蜘蛛家族),数组表示[性别数,物种数]。
我想得到所有第一个元素的总和......即所有性别的总和......
我尝试了不同的方法但没有成功,例如:
genre = []
#total = genre.transpose.map {|x| x.reduce(:+)}
或者....
def sum_deeply(h)
h.values.inject(0) { |m, v|
m + (Hash === v[0] ? sum_deeply(v[0]) : v[0].to_i)
}
end
puts sum_deeply(Aranea)
但是没有一个适用于转置我得到一个没有隐式转换错误...
任何人都可以启发我吗?谢谢
!!!更新.... 08.07.2020... 找到解决方案
families = Aranea
num_genders = families.flat_map do |_family_name, species_hash|
num_genders, _num_species = species_hash.values.transpose
num_genders
感谢 Kache 在这方面的帮助。
【问题讨论】: