Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

156
Vistas
Ruby - búsqueda de matriz de 2 dimensiones

Tengo la siguiente matriz de 2 dimensiones

 data = [ [5014031, nil], [5014032, nil], [5014033, 0], [5014034, nil], [3014035, 1], [5014036, 1], [5014037, 2], [5014038, nil], [5014039, 2], [5014040, nil], [2014041, nil], [3014042, 2] ]

Cuando sé el valor del primer entero de una de estas matrices, por ejemplo, 5014034, ¿cuál sería la forma más eficiente de obtener el siguiente valor entero donde el segundo elemento coincide con cero? (por ejemplo, espero que se devuelva 5014038)

gracias scott

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Manera simple, usando #drop_while y #find_index :

 data = [ [5014031, nil], [5014032, nil], [5014033, 0], [5014034, nil], [5014035, 1], [5014036, 1], [5014037, 2], [5014038, nil], [5014039, 2], [5014040, nil], [5014041, nil], [5014042, 2] ] remaining_arr = data.drop_while { |arr| arr[0] != 5014034 }[1 .. -1] next_int = remaining_arr[remaining_arr.find_index { |arr| arr[1].nil? }][0]
over 4 years ago · Santiago Trujillo Denunciar

0

Puede dividir la matriz en dos cuando el primer elemento de la matriz interna coincida con 5014034 . Extrae la segunda matriz resultante y usa find para buscar la matriz interna cuyo segundo elemento es nulo:

 arr .slice_when { |a, _| a == 5014034 } # #<Enumerator: ...> .to_a # [[[5014031, nil], [5014032, nil], [5014033, 0], [5014034, nil]], [[5014035, 1], [5014036, 1], [5014037, 2], [5014038, nil], [5014039, 2], [5014040, nil], [5014041, nil], [5014042, 2]]] [1] # [[5014035, 1], [5014036, 1], [5014037, 2], [5014038, nil], [5014039, 2], [5014040, nil], [5014041, nil], [5014042, 2]] .find { |_, b| b.nil? } # [5014038, nil] [0] # 5014038

Tenga en cuenta que el encadenamiento de este método puede fallar si no hay una matriz en arr cuyo primer objeto dentro coincida con 5014034 y/o lo mismo para find .

over 4 years ago · Santiago Trujillo Denunciar

0

Si se ordena, lo siguiente podría ser más rápido

 data = [ [5014031, nil], [5014032, nil], [5014033, 0], [5014034, nil], [5014035, 1], [5014036, 1], [5014037, 2], [5014038, nil], [5014039, 2], [5014040, nil], [5014041, nil], [5014042, 2] ] start_element = data.bsearch_index{ |a| a[0] >= 5014034 } if start_element == nil || data[start_element] != 5014034 puts "not found" else data.slice((start_element+1)..).find { |a| a[1] == nil }[0] end
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda