Desenvolvimento

28 ago, 2018

Ruby: .select, .map e .reduce

Publicidade

Para demonstrar a utilização do .select, .map e o .reduce, eu irei utilizar alguns dados de um dos meus artigos anteriores: JavaScript: map(), filter() e reduce().

Tendo esse artigo como referência, vamos criar os seguintes exemplos:

  • Selecionar apenas os cachorros
  • Retornar a idade real de cada cachorro
  • Somar a idade de todos os cachorros juntos

Utilizando o seguinte array de objetos:

pets = [
  {
    name: 'Butters',
    age: 3,
    type: 'dog'
  },
  {
    name: 'Lizzy',
    age: 6,
    type: 'dog'
  },
  {
    name: 'Red',
    age: 1,
    type: 'cat'
  },
  {
    name: 'Joey',
    age: 3,
    type: 'dog'
  },
];

Selecionar apenas os cachorros

Para selecionar apenas os pets com o type dog, eu irei utilizar o .select. Abaixo você tem um exemplo demonstrando esse passo:

pets = [{name: "Butters", age: 3, type: "dog"}, {name: "Lizzy", age: 6, type: "dog"}, {name: "Red", age: 1, type: "cat"}, {name: "Joey", age: 3, type: "dog"}]

puts pets.select { |item| item[:type] == "dog" }

Resultado:

ruby utilizando .select para filtrar

Retornar a idade real de cada cachorro

Agora que filtramos para retornar todos cachorros do nosso array, vamos calcular a idade real de cada de cada um deles. Para isso, nós podemos utilizar o .map.

Observação: não podemos esquecer que um ano nosso, são sete de um cachorro.

dogs.map { |dog| puts dog[:age] * 7 }

Resultado:

ruby utilizando o map

Somar a idade de todos os cachorros

Para finalizar, vamos somar a idade de todos cachorros do nosso array. Para isso, vamos utilizar o reduce:

puts dogs.map { |dog| dog[:age] * 7 }.reduce(:+)
ruby reduce

Bem simples, né?

Nesse primeiro momento resolvi demonstrar eles em um cenário simples, para que nos próximos artigos nós possamos criar alguns exemplos mais complexos.

Com isso, finalizamos mais esse artigo. Espero que tenham gostado e até a próxima, pessoal!