Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

150
Visualizações
¿Por qué no puedo modificar la matriz fuera del método .each?
def adjacent_sum(arr) narr = [] arr.each.with_index do |num, index| narr << (arr[index] + arr[index+1]) end return narr end print adjacent_sum([3, 7, 2, 11]) #=> [10, 9, 13], because [ 3+7, 7+2, 2+11 ] adjacent_sum([2, 5, 1, 9, 2, 4]) #=> [7, 6, 10, 11, 6], because [2+5, 5+1, 1+9, 9+2, 2+4]

Estoy tratando de modificar el narr en función de la entrada del usuario. Básicamente, tratando de obtener todos los números adyacentes para sumar y devolver una nueva matriz.

Escriba un método adyacente_sum que tome una matriz de números y devuelva una nueva matriz que contenga las sumas de los números adyacentes en la matriz original. Vea los ejemplos.

Soy nuevo en Ruby y su forma de pensar. No sé qué método de iteración usar para este problema y sé que hay muchos métodos de iteración. PODRÍA seguir la ruta anterior y simplemente hacer un ciclo while, pero quiero entender la mecánica del ciclo .each.

Aquí está el mensaje de error:

 /tmp/file.rb:5:in `+': nil can't be coerced into Integer (TypeError) from /tmp/file.rb:5:in `block in adjacent_sum' from /tmp/file.rb:3:in `each' from /tmp/file.rb:3:in `with_index' from /tmp/file.rb:3:in `adjacent_sum' from /tmp/file.rb:10:in `<main>'
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Su ciclo está iterando sobre cada elemento de la lista. Tomemos su primer ejemplo.

 [3, 7, 2, 11]

Bien, estamos iterando. Primero, llegamos a 3 (estamos sumando 7, porque es el siguiente). Luego, llegamos a 7 (le estamos agregando 2). Tercero, llegamos a 2 (sumándole 11). Finalmente, llegamos a 11, ¿y qué le estamos agregando? Estamos agregando arr[4] , que no existe, de ahí su error.

each (y todas sus muchas variantes) operan fundamentalmente en la noción de que está tomando todos los elementos de la lista subyacente. En su caso, desea todos menos el último elemento, ya que debe poder agregar un elemento "siguiente" para realizar la adición. Puede omitir explícitamente el último elemento así

 arr.each.with_index do |num, index| if index < arr.size - 1 narr << (arr[index] + arr[index+1]) end end

pero eso no es mejor que un ciclo while directo. El objetivo de todos los métodos enumerables de Ruby es elegir la herramienta adecuada para el trabajo y, en este caso, Enumerable de Ruby tiene exactamente la herramienta.each_cons te da una ventana deslizante de colección de N elementos adyacentes. Entonces podemos escribir

 def adjacent_sum(arr) arr.each_cons(2).map { |x, y| x + y } end

Este es el poder del módulo Enumerable de Ruby. Una vez que tiene una construcción de alto nivel que comprende la iteración, proporciona un montón de herramientas para iterar de forma inteligente sobre estructuras de datos, y es por eso que es beneficioso en un ciclo while simple.

over 4 years ago · Santiago Trujillo Relatório

0

def adjacent_sum(arr) narr = [] l = arr.length arr.each.with_index do |num,index| if index < arr.size-1 narr << arr[index] + arr[index+1] end end return narr end print adjacent_sum([3, 7, 2, 11]) #=> [10, 9, 13], because [ 3+7, 7+2, 2+11 ] puts print adjacent_sum([2, 5, 1, 9, 2, 4]) #=> [7, 6, 10, 11, 6], because [2+5, 5+1, 1+9, 9+2, 2+4] puts

Agregué el condicional if para asegurarme de que la matriz no se evalúe fuera del índice de la matriz y el código funcionó: si el índice < arr.size-1

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda