È necessario fornire l'implementazione da zero? Non sono riuscito a trovare alcun riscontro implicito, nemmeno nel tratto Impliciti dell'ultimo resort. seqDerivedOrdering
ovviamente non funziona, poiché Array
non è un Seq
.Come definire l'ordinamento [Array [Byte]]?
risposta
È possibile implementare un semplicissimo Ordering
che chiama toSeq
su array con comapred e chiama quindi lo seqDerivedOrdering
. La conversione in Seq dovrebbe essere quasi gratuita in termini di prestazioni.
Se si vuole che sia efficace, dovrete scrivere il proprio (questo uno gestisce valori nulli, se si può supporre non nulli, basta utilizzare il lungo blocco else):
val o = new math.Ordering[Array[Byte]] {
def compare(a: Array[Byte], b: Array[Byte]): Int = {
if (a eq null) {
if (b eq null) 0
else -1
}
else if (b eq null) 1
else {
val L = math.min(a.length, b.length)
var i = 0
while (i < L) {
if (a(i) < b(i)) return -1
else if (b(i) < a(i)) return 1
i += 1
}
if (L < b.length) -1
else if (L < a.length) 1
else 0
}
}
}
In caso contrario, puoi .toSeq
impacchettare in un WrappedArray
e rimandare a un confronto Seq invece di fare la tua scansione. (Questo finirà per inscatolare e unboxing dei tuoi byte, motivo per cui non è efficiente. Dal momento che il boxing di byte viene generalmente eseguito cercando in una tabella di tutti i byte, non è orribilmente inefficente, quindi potresti riuscire a farla franca a meno che non si sta facendo ad esempio l'elaborazione di file binario pesanti)
Se siete in brevità piuttosto che le prestazioni grezzo:.
scala> Ordering.by((_: Array[Byte]).toIterable)
res0: scala.math.Ordering[Array[Byte]] = [email protected]
- 1. Definire array associativo di array
- 2. Byte Array in Python
- 3. Byte Array to NSData
- 4. Int a byte array
- 5. CGImage from byte array
- 6. Loading Byte Array Assembly
- 7. Tokenize byte array
- 8. Come definire il thread safe array?
- 9. Come definire array vuoto in spavalderia
- 10. Esegui array Byte come nuovo programma
- 11. Array di byte Android su Bitmap Come
- 12. Java: come "tagliare" un array di byte?
- 13. Come confrontare due array di byte
- 14. Come inviare array di byte tramite RestTemplate
- 15. Come combinare due array di byte
- 16. byte-array come bitfield in C#?
- 17. Come convertire un array di byte in un array int?
- 18. Byte array in ogg-c
- 19. Come convertire l'immagine in array di byte e array di byte in stringa Base64 in Android?
- 20. Che cos'è un array byte []?
- 21. Byte Array su Oggetto immagine
- 22. array di byte in groove
- 23. array di byte in pdf
- 24. Int16 ad array di byte
- 25. Cast byte array a float
- 26. Converti lista <byte[]> in un byte [] array
- 27. Rimozione dei primi 16 byte da un array di byte
- 28. Converti array di byte in array di bit?
- 29. converte array di stringhe in array di byte
- 30. Convertire un array di byte a una classe che contiene un array di byte in C#
Sì, ho voluto aggiungere qualcosa di simile, ma volevo chiedere prima. Forse ha senso aggiungere qualcosa a stdlib per renderlo più ovvio? – venechka
@venechka - Sarebbe bello se l'oggetto 'Array' li implementasse per ogni tipo. Forse qualcuno dovrebbe presentare una richiesta di miglioramento? Nel frattempo, però, ci sono _lots_ di cose pratiche che la libreria standard non ha. Dovresti abituarti ad avere la tua libreria standard personale per riempire quei pezzi che ti servono! –
è sufficiente avere una singola versione spececizzata, penso. – venechka