min_by ў HashMap ўнутры групы значэнняў у лал

У мяне ёсць HashMap ў форме ніжэй:

{1=>[a, b, 3], 2=>[a, c, 5], 3=>[a, d, 1], 4=>[a, e, 4], 5=>[f, g, 2]}...

мне трэба мінімальная колькасць трэцяга значэння ў кожнай пары ключоў значэння, але з у групе ж першага значэння. напрыклад, у прыведзеным вышэй HashMap, існуе чатыры асноўных пар значэнняў з першым значэннем, як «а», мне трэба, каб атрымаць мінімум трэцяга значэння, для якога першае значэнне "а", гэта значыць, 1

Я паспрабаваў hash.min_by {| да, v |, v [2]} , і, відавочна, ён даў мне мінімум у карце. Як я атрымліваю мінімум з групай «А-х гадоў?

0
Проста дадайце v [0] == "а" && v [2] у min_by замест гэтага.
дададзена аўтар squiguy, крыніца
@squiguy ён не працуе, паказваючы мне «кожны» параўнанне flaseclass памылкі
дададзена аўтар user1455116, крыніца
@squiguy ён не працуе, паказваючы мне «кожны» параўнанне flaseclass памылкі
дададзена аўтар user1455116, крыніца

6 адказы

hash.values.select {|a| a[0] == 'a'}.map {|a| a[2]}.min
2
дададзена
hash.values.select {|a| a[0] == 'a'}.map {|a| a[2]}.min
2
дададзена

Калі вы хочаце, адлюстраванне ўсіх груп, якія можна выкарыстоўваць:

hash.values.each_with_object(Hash.new) do |(group_by, _, v), min_map|
  current_min = min_man[group_by] ||= v  
  min_map[group_by] = v if v < current_min  
end
1
дададзена

Калі вы хочаце, адлюстраванне ўсіх груп, якія можна выкарыстоўваць:

hash.values.each_with_object(Hash.new) do |(group_by, _, v), min_map|
  current_min = min_man[group_by] ||= v  
  min_map[group_by] = v if v < current_min  
end
1
дададзена
h = {1=>['a', 'b', 3], 2=>['a', 'c', 5], 3=>['a','d', 1], 4=>['a', 'e', 4], 5=>['f', 'g', 2]} #=>1
h.map{|k,v| v.last if v[0] == 'a' }.compact.min #=>1
0
дададзена
h = {1=>['a', 'b', 3], 2=>['a', 'c', 5], 3=>['a','d', 1], 4=>['a', 'e', 4], 5=>['f', 'g', 2]} #=>1
h.map{|k,v| v.last if v[0] == 'a' }.compact.min #=>1
0
дададзена