Il y a quelques problèmes avec le système bidimensionnel Arrays
la façon dont vous les mettez en œuvre.
a= [[1,2],[3,4]]
a[0][2]= 5 # works
a[2][0]= 6 # error
Hash
comme Array
Je préfère utiliser Hashes
pour un système multidimensionnel Arrays
a= Hash.new
a[[1,2]]= 23
a[[5,6]]= 42
L'avantage est que vous ne devez pas créer manuellement des colonnes ou des lignes. L'insertion dans les hachages est presque O(1), donc il n'y a pas d'inconvénient ici, aussi longtemps que votre fichier Hash
ne devienne pas trop grande.
Vous pouvez même définir une valeur par défaut pour tous les éléments non spécifiés.
a= Hash.new(0)
Maintenant, comment obtenir des sous-réseaux ?
(3..5).to_a.product([2]).collect { |index| a[index] }
[2].product((3..5).to_a).collect { |index| a[index] }
(a..b).to_a
s'exécute en O(n). La récupération d'un élément d'un Hash
est presque O(1), donc la collecte s'exécute en presque O(n). Il n'y a aucun moyen de le rendre plus rapide que O(n), car copier n éléments est toujours O(n).
Hashes
peuvent avoir des problèmes lorsqu'ils deviennent trop gros. J'y réfléchirais donc à deux fois avant de mettre en place un système multidimensionnel. Array
comme ça, si je savais que ma quantité de données devient grande.