list=[
{:cod => "0001", :name => "name1", :val => 10},
{:cod => "0001", :name => "name1", :val => 10},
{:cod => "0002", :name => "name2", :val => 10},
{:cod => "0002", :name => "name2", :val => 10},
{:cod => "0004", :name => "name4", :val => 10},
{:cod => "0004", :name => "name4", :val => 10},
{:cod => "0004", :name => "name4", :val => 10},
{:cod => "0005", :name => "name5", :val => 10},
{:cod => "0005", :name => "name5", :val => 10}
]O que eu gostaria de aprender é como remover os registros são duplicados e somar os valores :val.
list=[
{:cod => "0001", :name => "name1", :val => 20},
{:cod => "0002", :name => "name2", :val => 20},....
]Grato.
--
Você recebeu esta mensagem porque está inscrito no Grupo "ruby-sp" em
Grupos do Google.
Para postar neste grupo, envie um e-mail para rub...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
ruby-sp+u...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/ruby-sp?hl=pt-BR
Página oficial do GURU-SP: http://www.guru-sp.org
[{:cod => "0001", :name => "name1", :val => 10},
{:cod => "0001", :name => "name1", :val => 10},
{:cod => "0002", :name => "name2", :val => 10},
{:cod => "0002", :name => "name2", :val => 10}]
reduce(&:+) deve ser somente para o mesmo :cod. e não para todos, que ficaria assim:
[{:cod => "0001", :name => "name1", :val => 20},
{:cod => "0002", :name => "name2", :val => 20}]
list=[
{:cod => "0001", :name => "name1", :val => 10},
{:cod => "0001", :name => "name1", :val => 10},
{:cod => "0002", :name => "name2", :val => 10},
{:cod => "0002", :name => "name2", :val => 10},
{:cod => "0004", :name => "name4", :val => 10},
{:cod => "0004", :name => "name4", :val => 10},
{:cod => "0004", :name => "name4", :val => 10},
{:cod => "0005", :name => "name5", :val => 10},
{:cod => "0005", :name => "name5", :val => 10}
]
list.inject(Hash.new(0)) { |hash, el| hash[el[:cod]] += el[:val] ; hash }
Sim, Renato vou providenciar uma class para resolver esse comportamento e obrigado pelo link.
Abraço.Hey bro, veja se é isso aki:list.group_by{|e|e[:cod]}.map{|k,v|[k,v.map{|e|e[:val]}.reduce(&:+)]}Curti o o desafio! Espero que ajude. Abraço!