Scala: à l'Aide de table de hachage avec une valeur par défaut
J'ai une mutable HashMap et que vous souhaitez l'utiliser comme un défaut dans le dictionnaire. L'évidence de la méthode semble être d'utiliser getOrElse et de fournir la valeur par défaut à chaque fois comme une deuxième valeur. Toutefois, cela semble un peu inélégant dans mon cas d'utilisation comme la valeur par défaut ne change pas.
var x = HashMap(1 -> "b", 2 -> "a", 3 -> "c")
println(x.getOrElse(4, "_")
println(x.getOrElse(5, "_"))
//And so on...
println(x.getOrElse(10, "_"))
Est-il possible de créer une table de hachage (ou de catégorie similaire), telles que les tentatives d'accès non défini touches renvoie une valeur par défaut définie sur la création de la table de hachage? Je remarque que la table de hachage.par défaut est mise à lancer une exception, mais je me demande si cela peut être changé...
- Pour n'importe qui qui bute sur cette question, missingfaktor post affirme à juste titre que "la Scala 2.9.1. mutable.La carte est livrée avec un withDefaultValue méthode"
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Alors:
mutable.HashMap
n'est pas unwithDefaultValue
méthode commeimmutable.HashMap
.withDefault
dans scala-lang.org/api/current/scala/collection/immutable/Map.html. Donc peut-être que c'est pas trop exagéré. La scala-user mailing liste est probablement un bon endroit pour se renseigner à ce sujet et voir si un rapport de bug doit être signalé.Wow, il m'est arrivé de visiter ce thread a exactement un an après que j'ai posté ma dernière réponse ici. 🙂
Scala 2.9.1.
mutable.Map
est livré avec unwithDefaultValue
méthode. REPL session:EDIT:
Pour
mutable.HashMap
, vous pouvez effectuer les opérations suivantes:Il pourrait y avoir une meilleure façon de le faire. Attendre que les autres à répondre.
mutable.HashMap
. Je ne sais pas comment le faire avecmutable.HashMap
. Je vais devoir chercher dans l'API.Je suis de plus en plus de java gars... mais si
getOrElse
n'est pas définitive, pourquoi ne pas vous venez de prolongerHasMap
et de fournir quelque chose comme ceci:Remarque: la syntaxe est probablement foiré mais j'espère que vous aurez le point de
getOrElse
- il a moins de flexibilité, est inutilement verbeux, et si vous doit faire cela, c'est une forte indication que vous devriez être à l'aide de certains de haut niveau d'abstraction, comme monoids.