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

155
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 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