2017-10-19 4 views
3

En Python je peux avoir des clés de dictionnaire complexes, comme par exemple:Comment puis-je avoir une clé composite dans Kotlin?

d = {} 
d[(1, 2)] = 3 
print d[(1, 2)] # prints 3 

Comment puis-je déclarer et remplir une telle carte dans Kotlin?

Edit: J'ai essayé de déclarer une carte comme ça, mais je ne sais pas comment le remplir:

val my_map = HashMap<Pair<Int, Int>, Int>() 
+1

Ce n'est pas intrinsèquement plus complexe. La clé peut être n'importe quel type que vous aimez, y compris une paire. – chris

Répondre

3

Il est simple, vous devez d'abord créer votre dictionnaire, puis insérez la clé et les valeurs:

val (a, b):Pair<Int, String> = Pair(1, "x") 

val map: HashMap<Pair<Int, String>, Int> = hashMapOf((a, b) to 1) 

map[Pair(2, "y")] = 3 

et ainsi de suite :)

+0

Ok ça a marché, j'ai dû écrire explicitement "Pair" comme ceci: 'my_map [Pair (1, 2)] = 3' – fafl

+0

@fafl super! Oui une fois que vous avez créé, vous pouvez également ajouter un élément comme ça, j'ai toujours aimé aider. –

1

en Kotlin, contrairement à Python il n'y a aucun type de données de tuple. Pour les deux-tuples, il y a une classe Pair. Pour une plus grande arité, vous devez utiliser des classes de données.

val map: HashMap<Pair<Int, Int>, Int> = hashMapOf(Pair(1, 2) to 3) 
val nullable: Int? = map[Pair(1, 2)] 
val notNullable = map.getValue(Pair(1, 2))