Dire che ho l'array [1,2,3,1,2,3]
e voglio eliminare la prima istanza di (diciamo) 2
dall'array dando [1,3,1,2,3]
. Qual è il modo più semplice?Eliminare la prima istanza dell'elemento corrispondente dall'array
28
A
risposta
61
li.delete_at(li.index(n) || li.length)
li[li.length]
è fuori portata, in modo che il || li.length
gestisce il caso in cui n
non è nella lista.
irb(main):001:0> li = [1,2,3,1,2,3]
=> [1, 2, 3, 1, 2, 3]
irb(main):002:0> li.delete_at(li.index(2) || li.length)
=> 2
irb(main):003:0> li.delete_at(li.index(42) || li.length)
=> nil
irb(main):004:0> li
=> [1, 3, 1, 2, 3]
12
Se || li.length
è quello di evitare l'invio di nil
a li.delete_at
(che si tradurrebbe in un TypeError), quindi una versione più leggibile potrebbe assomigliare a questo
li.delete_at li.index(42) unless li.index(42).nil?
+6
Probabilmente vuoi memorizzare 'li.index (42)' in una variabile, per evitare di fare la ricerca due volte. Le prestazioni saranno molto migliori per i grandi array. – Kelvin
4
Forse dovrebbe diventare parte di stdlib :
class Array
def delete_first item
delete_at(index(item) || length)
end
end
Problemi correlati
- 1. Selezionare la prima istanza di un record
- 2. Eliminare la prima colonna in Notepad ++
- 3. Trova la prima riga non corrispondente in VIM
- 4. R: strsplit in prima istanza
- 5. Istanza per ambito di durata corrispondente, con impostazione predefinita?
- 6. Restituisce la stringa fino alla stringa corrispondente in Ruby
- 7. Trova la stringa parziale corrispondente
- 8. Eliminare la visualizzazione se esistente
- 9. Trovare prima istanza di una lista in una seconda lista
- 10. Python trovare prima istanza di non numero zero nella lista
- 11. Istanza DbConfiguration utilizzata prima del rilevamento del tipo 'EFConfiguration'
- 12. SQLAlchemy - istanza a pieno carico prima di scollegare
- 13. PHP rimuove tutto prima dell'ultima istanza di un carattere
- 14. Come eliminare una tabella in Entity Framework Code Prima?
- 15. Mance nessun gestore corrispondente per la chiusura
- 16. Python: lista e la stringa corrispondente
- 17. Controllo NULL prima di eliminare un oggetto con eliminazione sovraccaricata
- 18. Accelerare la prima pagina Caricare in django
- 19. Istanza Mostra per la funzione
- 20. Come creare un trigger prima di eliminare in SQL Server?
- 21. Come eliminare l'area di lavoro di Hudson prima della compilazione?
- 22. Eliminare un record LINQ su SQL senza caricarlo prima
- 23. La prima istanza di attività non viene mai raccolta dalla garbage collection?
- 24. jQuery + Come posso selezionare solo la prima istanza di ciascun elemento?
- 25. Sostituire solo la prima istanza di una stringa in un NSString
- 26. Ottieni istanza per istanza-id
- 27. Come eliminare la data e l'ora che appaiono prima di ogni istruzione NSLog nella console
- 28. script di Unix per eliminare la prima riga di un file su un Mac
- 29. ElasticSearch ricerca parziale corrispondente
- 30. Come eliminare la connessione jsPlumb
Grazie. Ho battuto la mia testa cercando di esprimere questo elegantemente. –
Non capisco il '|| li.length' chiunque può spiegare per favore – gates
Qualsiasi valore in ruby può essere trattato come valore booleano, con solo 'false' e' nil' che valutano come false. La sintassi del doppio tubo è una comoda abbreviazione. 'a || b' significa "a, a meno che non sia nulla, quindi b". – erich2k8