Se a
è l'array, voglio a.index(a.max)
, ma qualcosa di più simile a Ruby. Dovrebbe essere ovvio, ma ho difficoltà a trovare la risposta in questo e altrove. Ovviamente, sono nuovo di Ruby.In Ruby, qual è il modo più pulito per ottenere l'indice del valore più grande in un array?
risposta
Per rubino 1.8.7 o superiore:
a.each_with_index.max[1]
Fa un'iterazione. Non del tutto la cosa più semantica di sempre, ma se ti ritrovi a fare questo molto, lo avvolgerei comunque in un metodo index_of_max
.
a = [1, 4 8]
a.inject(a[0]) {|max, item| item > max ? item : max }
almeno è Ruby-simile :)
In ruby 1.9.2 posso fare questo;
arr = [4, 23, 56, 7]
arr.rindex(arr.max) #=> 2
Questa è fondamentalmente una versione peggiore della soluzione originale indesiderata. – MegaTom
Ecco quello che sto pensando di rispondere a questa domanda:
a = (1..12).to_a.shuffle
# => [8, 11, 9, 4, 10, 7, 3, 6, 5, 12, 1, 2]
a.each_index.max_by { |i| a[i] }
# => 9
Ecco un modo per ottenere tutti i valori di indice dei valori massimi se più di uno.
Data:
> a
=> [1, 2, 3, 4, 5, 6, 7, 9, 9, 2, 3]
È possibile trovare l'indice di tutti i valori massimi (o qualsiasi dato valore) da:
> a.each_with_index.select {|e, i| e==a.max}.map &:last
=> [7, 8]
Volevo solo sottolineare una differenza comportamentale e prestazioni per alcuni dei le soluzioni qui. La "cravatta spezzare" il comportamento di duplicare elementi max:
a = [3,1,2,3]
a.each_with_index.max[1]
# => 3
a.index(a.max)
# => 0
Per curiosità ho entrambi imbattuto in Benchmark.bm
(per il a
sopra):
user system total real
each_with_index.max 0.000000 0.000000 0.000000 ( 0.000011)
index.max 0.000000 0.000000 0.000000 ( 0.000003)
Poi ho generato un nuovo a
con Array.new(10_000_000) { Random.rand }
e reran il test:
user system total real
each_with_index.max
2.790000 0.000000 2.790000 ( 2.792399)
index.max 0.470000 0.000000 0.470000 ( 0.467348)
Questo mi fa pensare a meno hai specificamente bisogno di scegliere il massimo indice massimo, a.index(a.max)
è la scelta migliore.
- 1. Qual è il modo più pulito per ottenere il checksum di un array multidimensionale?
- 2. Qual è il modo più intelligente/più pulito per iterare asincrono su array (o objs)?
- 3. Modelli Inside Express/EJS, qual è il modo più pulito per scorrere un array?
- 4. algoritmo per trovare il più grande calo in un array
- 5. Qual è il modo più pulito per eseguire la copia di Spring Beans in un JSP?
- 6. Qual è il modo più pulito di fare un ordinamento più uniq su un elenco Python?
- 7. Qual è il modo più pulito per visualizzare un oggetto java.util.Calendar in JSF?
- 8. Qual è il modo più pulito per ottenere la somma dei numeri in una raccolta/lista in Dart?
- 9. Qual è il modo più pulito per includere e accedere ai dati binari in VC++ Express?
- 10. modo più rapido per trovare il valore più grande ennesima in una matrice NumPy
- 11. Qual è il modo più veloce per ottenere più copie di un albero in python?
- 12. Qual è il modo più semplice per ottenere una chiave con il valore più alto da un hash in Perl?
- 13. Qual è il valore più grande sizeof (T) può produrre?
- 14. un modo pulito per combinare due tuple in una nuova tupla più grande in scala?
- 15. Finding valore più grande in un dizionario
- 16. Il modo più pulito e più pignolo per ottenere la data di domani?
- 17. Qual è il modo più "elegante" per definire un array costante globale in PHP
- 18. Qual è il modo più pulito per scrivere un ciclo di non blocco per javascript?
- 19. Qual è il modo più efficiente per memorizzare coppie nome/valore in un database Marklogic
- 20. Qual è il modo migliore/più pulito per implementare i test A-B in asp.net mvc?
- 21. Qual è il modo più pulito per creare una pipeline non lineare in Bash?
- 22. Qual è il modo più pulito per scrivere una stringa multilinea in JavaScript?
- 23. Qual è il modo più semplice in Javascript per ottenere solo il segno di un numero?
- 24. Modo Pythonic per ottenere l'elemento più grande in una lista
- 25. Qual è il più grande problema di prestazioni in Emberjs?
- 26. Qual è il modo più efficiente per ottenere il primo giorno del mese corrente?
- 27. Qual è il modo più efficiente per evitare operazioni duplicate in un array C#?
- 28. Qual è il modo più Pythonic per fornire un valore di fallback in un compito?
- 29. Qual è il modo più conciso per ottenere l'inverso di un valore booleano Java?
- 30. Qual è il datepicker più pulito e più semplice da utilizzare in Django?
Penso che ce l'abbia. Cosa c'è di non rubino a riguardo? – Ben
Ben, stavo cercando qualcosa come a.max_index. Indovina che non è incorporato. –
Anche se la funzione che desideri non è incorporata, puoi comunque aggiungere un membro '.max_index' alla classe' Array'. Ecco un esempio di estensione di 'String' o' Integer' con un membro personalizzato: http://www.hawkee.com/snippet/1260/ – bta