19-03-2011, 01:21 AM
Et puis un petit exemple en Scala pour le fun
Je l'ai fait un peu à l'arrachage, ça fait bien 6 mois que je n'avais pas touché une ligne de Scala :D
// Un import, pas besoin d'explication non ? :)
import scala.collection.mutable.HashMap
// La classe principale qui sert à exécuter le test
object Test {
// Une classe que je créer pour étendre le type de base HashMap
// afin d'y ajouter un nouveau type de "somme" de tableau
// et l'argument quelle prend à la construction,
// ici HashMap[String, Int] est mon type de tableau associatif, qui a des strings en tant que clé, et des int en tant que valeur
class HashMapImproved(hm: HashMap[String, Int]) {
// ici le nom de ma méthode un peu chelou "++=" oui oui lol
// ma fonction a comme argument une variable hm2 du type HashMap[String, Int]
// elle va retourner un HashMap[String, Int]
def +++= (hm2: HashMap[String, Int]): HashMap[String, Int] = {
// Pas besoin d'explication je pense, c'est un genre de foreach :)
for ((key,value) <- hm2) {
// si hm (ma variable de classe, voir plus haut dans la définition de ma classe) contient la clé
// j'ajoute sa valeur à l'actuelle, sinon je l'assigne directement
if (hm.contains(key)) {
hm(key) += value
} else {
hm(key) = value
}
}
// je retourne l'objet du coup
hm
}
}
// Donc ici la méthode principale qui va être exécuté pour faire les tests
def main(args: Array[String]) {
// Ca c'est un petit truc magique que l'on peut appeler un peu partout
// tous les objets du type HashMap vont être automatiquement convertis en objet du type
// HashMapImproved :)
implicit def convertHashMap2HashMapImproved(hm: HashMap[String, Int]) = new HashMapImproved(hm)
// Déclaration de mes variables de test
val array1 = new HashMap[String, Int]
val array2 = new HashMap[String, Int]
val array3 = new HashMap[String, Int]
// Remplissage de mes tableaux
array1 += ("nb_cerises" -> 2, "nb_bananes" -> 2, "nb_poires" -> 5)
array2 += ("nb_cerises" -> 100, "nb_choux" -> 20)
array3 += ("nb_tomates" -> 30, "nb_bananes" -> 20)
// Hop j'ajoute le tableau array1 au tableau array2
array2 +++= array1
// J'affiche le résultat
for ((key, value) <- array2) {
println(key + " : " + value)
}
println("-")
// J'ajoute le tableau array3 au tableau array2
array2 +++= array3
// J'affiche le résultat
for ((key, value) <- array2) {
println(key + " : " + value)
}
}
}
nb_poires : 5
nb_choux : 20
nb_bananes : 2
nb_cerises : 102
-
nb_poires : 5
nb_choux : 20
nb_bananes : 22
nb_tomates : 30
nb_cerises : 102
Je l'ai fait un peu à l'arrachage, ça fait bien 6 mois que je n'avais pas touché une ligne de Scala :D