2016-10-06 24 views
6
2d dizisi

Aslında bu çok basit bir soru, ancak bir saat sonra sorunumu çözemiyorum.Swift 3 Int 2

2d dizisi Int oluşturmak zorundayım.

Ben APPEND kullanmalıyım yoksa dizinin boyutunu belirtmek gerek aralık dışında Index:

arr[x][y] = 1 

önemli hata:

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

değerini değiştirmeye çalıştı?

Kafam karıştı ..

cevap

17

Bu gerçekten basit değil. çizgi:

var arr : [[Int]] = [] 

tip Array of Array of Int bir değişken oluşturur ve ilk olarak dizi boştur. Swift'de başka herhangi bir dizi gibi doldurmalısınız. geri tek bir diziye

edelim adım:

var row : [Int] = [] 

Artık boş bir dizi var. Sadece yapamaz:

row[6] = 10 

Önce dizine 6 de (7 değer) değeri erişmeden önce diziye 7 değerler eklemek gerekir.

Dizileriniz dizisiyle, dış diziyi bir dizi iç diziyle doldurmanız gerekir. Ve bu iç dizilerin her birinin uygun sayıda değerle doldurulması gerekir. İşte

Eğer 0'a

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

dış sayım değerine ayarlanmış her değerle önceden doldurulmuş matrisi istiyorum varsayarak Dizilerin sizin diziyi başlatmak için basit bir yoludur satır sayısını temsil eder ve iç sayım temsil sütun sayısı. Her birini gerektiği gibi ayarlayın. Eğer herhangi bir değer atamak için önce diziyi ve Altdizilim hem ilklendirmelisiniz

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

Çok teşekkür ederim, Diziler için çalışır mı? UIView ve diğer –

+0

dizisi gibi. Array herhangi bir tür tutabilir beri olmalıdır. Sadece bildirimi ve iç "yinelenen" parametresine geçirilen değeri değiştirin. Değerleri bile isteğe bağlı yapabilir ve yinelenen değer için 'nil' değerini girebilirsiniz. – rmaddy

1

kalmıyor, aynı zamanda her bir dizi uzunluk daha büyük olmalıdır:

Şimdi matris içinde herhangi bir hücreyi erişebilir ayarlamaya çalıştığınız dizin konumu.

Bunun nedeni, Swift'in alt dizileri sizin için ne başlattığını, ne de bir dizine atanırken dizi uzunluğunu artırmaz.

Örneğin, aşağıdaki kod başarısız olur:

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

Bunun yerine, tutmak istiyorum elementlerin sayısı ile bir dizi sunabilmesi, örneğin sıfır, bir varsayılan değer ile doldurma:

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

var a = Array(repeating: 0, count: 100) 
a[0] = 1 
// a == [1, 0, 0, 0...] 
0 değerlerine başlatılır 100 ile 100 arasında bir matris oluşturmak için Eğer matris için bir başlangıç ​​boyutu belirtmek istemiyorumise, bu şekilde yapabilirsiniz:

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

Kullanım sözlüğünü yerine dizisi.

Gereksiniminize bağlı olarak arrayOfDict veya dictOfDict'ı kullanabilirsiniz. 4 hızlı ileride varsayılan değer atayabiliriz.

var arrayOfDict = [[Int: Int]]() 
arrayOfDict[i][j, default: 0] 
arrayOfDict[i][j] = 0 

var dictOfDict = [Int: [Int: Int]]() 
dictOfDict[i, default: [0: 0]][j, default: 0] 
dictOfDict[i][j] = 0