web-dev-qa-db-fra.com

Swift 3 2d tableau de Int

C'est en fait une question très simple, mais après une heure, je ne peux pas résoudre mon problème.

J'ai besoin de créer un tableau 2D d'Int.

var arr = [[Int]]()
or
var arr : [[Int]] = []

essayé de changer la valeur:

arr[x][y] = 1

erreur fatale: index hors limites

Devrais-je utiliser APPEND ou dois-je spécifier la taille du tableau?

Je suis confus..

8
Mikhail Sein

Ce n'est pas simple vraiment. La ligne:

var arr : [[Int]] = []

Crée une variable de type Array of Array of Int et initialement le tableau est vide. Vous devez renseigner ceci comme n'importe quel autre tableau de Swift.

Revenons à un tableau unique:

var row : [Int] = []

Vous avez maintenant un tableau vide. Vous ne pouvez pas simplement faire:

row[6] = 10

Vous devez d’abord ajouter 7 valeurs au tableau avant de pouvoir accéder à la valeur à l’index 6 (la 7e valeur).

Avec votre tableau de tableaux, vous devez remplir le tableau extérieur avec tout un ensemble de tableaux intérieurs. Et chacun de ces tableaux internes doit être renseigné avec le nombre approprié de valeurs.

Voici un moyen simple d’initialiser votre tableau de tableaux en supposant que vous souhaitiez une matrice préremplie avec chaque valeur définie sur 0.

var matrix : [[Int]] = Array(repeating: Array(repeating: 0, count: 10), count: 10)

Le nombre externe représente le nombre de lignes et le nombre interne représente le nombre de colonnes. Ajustez chacun au besoin.

Vous pouvez maintenant accéder à n’importe quelle cellule de la matrice:

matrix[x][y] = 1 // where x and y are from 0 to rows-1/columns-1
19
rmaddy

Vous devez non seulement initialiser le tableau et les sous-tableaux avant de pouvoir affecter des valeurs, mais chaque longueur de tableau doit être supérieure à la position d'index que vous essayez de définir.

En effet, Swift n'initialise ni les sous-tableaux à votre place, ni n'incrémente la longueur du tableau lors de l'attribution d'un index.

Par exemple, le code suivant va échouer:

var a = [Int]()
a[0] = 1
// fatal error: Index out of range

Au lieu de cela, vous pouvez initialiser un tableau avec le nombre d'éléments que vous souhaitez conserver, en le remplissant avec une valeur par défaut, zéro par exemple:

var a = Array(repeating: 0, count: 100)
a[0] = 1
// a == [1, 0, 0, 0...]

Pour créer une matrice de 100 par 100 initialisée à 0 valeurs:

var a = Array(repeating: Array(repeating: 0, count: 100), count: 100)
a[0][0] = 1

Si vous ne souhaitez pas spécifier de taille initiale pour votre matrice, vous pouvez le faire comme suit:

var a = [[Int]]()
a.append([])
a[0].append(1)
1
Eneko Alonso