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

290
Visualizações
¿Código de Ruby corto y eficiente para transformar una matriz de palabras en cadenas aleatorias y separadas por comas, con un "y" antes de la última palabra?

Me gustaría transformar dicha matriz:

 ["apple","banana","pineapple","plum","pear"]

para

 I like plum, pineapple, banana, pear *and* apple.

Mi código actual es como:

 %Q{ I like #{%w[apple banana pineapple plum pear].shuffle.yield_self{|q| [q[0..-2].join(", "),q[-1]].join(" and ") }} }

¿Hay algún enfoque más %w[limpio inteligente, más corto, eficiente, rubyesco].mágico()?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

No sé si esto es más inteligente o más limpio, pero aquí vamos:

 def to_sentence(ary) ary = ary.dup.shuffle [ary.pop, ary.join(', ')].reverse.join(' and ') end
over 4 years ago · Santiago Trujillo Relatório

0

Me gustaría ofrecer dos soluciones. Ninguno muta la matriz que se pasa al método como argumento.

 arr = ["apple", "banana", "pineapple", "plum", "pear"]

#1

 def to_sentence(arr) *all_but_last, last = arr.shuffle all_but_last.join(', ') << ' and ' << last end
 to_sentence(arr) #=> "pear, plum, pineapple, apple and banana" to_sentence(arr) #=> "banana, pear, pineapple, plum and apple" to_sentence(arr) #=> "banana, plum, apple, pineapple and pear" to_sentence(arr) #=> "banana, pineapple, pear, apple and plum"

#2

 def to_sentence(arr) arr.shuffle.join(', ').sub(/,(?!.*,)/, ' and') end
 to_sentence(arr) #=> "banana, plum, pear, apple and pineapple" to_sentence(arr) #=> "pear, plum, pineapple, banana and apple" to_sentence(arr) #=> "apple, pineapple, plum, pear and banana" to_sentence(arr) #=> "apple, plum, pear, pineapple and banana"

La expresión regular coincide con una coma que no va seguida de otra coma en la cadena (es decir, coincide con la última coma de la cadena). (?!.*,) es una anticipación negativa .

La expresión regular también podría escribirse

 /.*\K,/

.* coincide con cualquier carácter que no sea un terminador de línea, tantos como sea posible (incluidas las comas), porque * es por defecto codicioso . \K luego restablece el inicio de la coincidencia a la ubicación actual en la cadena (justo antes de la última coma) y descarta los caracteres consumidos previamente de la coincidencia que se devuelve. Luego se empareja una coma, que necesariamente es la última coma de la cadena.

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