Scala: einfache Möglichkeit, Arrays in einem Set oder einer Map zu platzieren

  • Da == nicht mit Arrays funktioniert, kann ich keinen Arrayset (oder Map mit Array-Schlüsseln) erstellen. Ich möchte den Performance-Hit der Konvertierung meiner Arrays in einen Vektor oder eine Liste oder etwas anderes nicht nehmen. Gibt es eine einfache Möglichkeit, einen natürlichen Vergleich und einen Hashcode in Arrays zu definieren, damit ich sie in ein Set einfügen kann?

    22 November 2011
    Jay Hacker
1 answer
  • Verwenden Sie WrappedArray von collection.mutable. Es bietet die richtige Gleichheit für Arrays mit minimalem Overhead. apply, update usw. Aufrufe werden an das darunterliegende Array delegiert. Es gibt auch spezielle Klassen für primitive Typen (z. B. WrappedArray.ofInt), um Boxen und Unboxing zu vermeiden.

     scala> new WrappedArray.ofInt(Array(2, 3, 4))
    res35: scala.collection.mutable.WrappedArray.ofInt = WrappedArray(2, 3, 4)
    
    scala> new WrappedArray.ofInt(Array(2, 3, 4))
    res36: scala.collection.mutable.WrappedArray.ofInt = WrappedArray(2, 3, 4)
    
    scala> res35 == res36
    res37: Boolean = true
     
    22 November 2011
    missingfaktor