Elevar ao quadrado elementos de um array é uma tarefa comum em programação. Ruby oferece diversas maneiras elegantes de realizar isso eficientemente. Este artigo explora quatro abordagens, comparando sua efetividade e legibilidade.
Sumário
- Método 1: Usando o método
map
- Método 2: Usando o método
each
- Método 3: Usando
each_with_index
- Método 4: Usando
inject
- Conclusão
- FAQ
Método 1: Usando o método map
O método map
é a maneira mais idiomática e eficiente de elevar ao quadrado elementos de um array em Ruby. Ele itera sobre cada elemento, aplica um bloco de código dado e retorna um array novo contendo os resultados. Esta abordagem é preferida por seu estilo funcional e clareza, garantindo que o array original permaneça inalterado.
array = [1, 2, 3, 4, 5]
squared_array = array.map { |x| x**2 }
puts squared_array # Saída: [1, 4, 9, 16, 25]
Método 2: Usando o método each
O método each
itera sobre cada elemento, mas não retorna diretamente um novo array. Para elevar ao quadrado elementos usando each
, um novo array deve ser criado e preenchido dentro do loop. Isso é menos conciso do que usar map
.
array = [1, 2, 3, 4, 5]
squared_array = []
array.each { |x| squared_array << x**2 }
puts squared_array # Saída: [1, 4, 9, 16, 25]
Método 3: Usando each_with_index
each_with_index
fornece tanto o elemento quanto seu índice durante a iteração. Embora não seja estritamente necessário para elevar ao quadrado, é útil para operações dependentes de valor e posição.
array = [1, 2, 3, 4, 5]
squared_array = []
array.each_with_index { |x, index| squared_array << x**2 }
puts squared_array # Saída: [1, 4, 9, 16, 25]
Método 4: Usando inject
O método inject
(também chamado de reduce
) acumula um resultado sobre o array. Embora poderoso, é menos intuitivo para o simples quadrado em comparação com map
e adiciona complexidade desnecessária.
array = [1, 2, 3, 4, 5]
squared_array = array.inject([]) { |result, x| result << x**2 }
puts squared_array # Saída: [1, 4, 9, 16, 25]
Conclusão
Para elevar ao quadrado elementos de um array, o método map
oferece a solução mais elegante e eficiente. Sua concisão e estilo funcional o tornam a escolha preferida. Embora outros métodos funcionem, são menos adequados devido à complexidade ou verbosidade adicionais.
FAQ
P: Posso modificar o array original? R: Modificar o array original no lugar é possível, mas criar um novo array é geralmente recomendado para melhor clareza do código e para prevenir efeitos colaterais indesejados.
P: E quanto a elementos não numéricos? R: Elevar ao quadrado elementos não numéricos causará um TypeError
. Use métodos como select
para filtrar elementos não numéricos antes de elevar ao quadrado.
P: Existem diferenças de desempenho? R: Para arrays grandes, pequenas diferenças de desempenho podem existir, mas map
é geralmente altamente otimizado. As diferenças são geralmente insignificantes, a menos que se esteja lidando com conjuntos de dados extremamente grandes.