2015-03-15 5 views
0

Немного ярлыка.Инициирование многомерного массива

let history = 5 
var gradeTimeline = [Int](count:history*12, repeatedValue:0) 

приведет к одномерному массиву. Есть ли способ сделать это и для 2-мерного массива? Длинная форма будет:

var gradesTimeline = [[Int]]() 
for i in 0...10 { gradesTimeline.append(gradeTimeline) } 

ответ

1

Try:

var gradesTimeline = (0..<10).map { _ in [Int](count:12*history, repeatedValue:0) } 

Но из-за стоимости семантики Array вы также можете сделать:

var gradesTimeline = [[Int]](count:2, repeatedValue:([Int](count:3, repeatedValue:0))) 

что приводит к

gradesTimeline: [[Int]] = 2 values { 
    [0] = 3 values { 
    [0] = 0 
    [1] = 0 
    [2] = 0 
    } 
    [1] = 3 values { 
    [0] = 0 
    [1] = 0 
    [2] = 0 
    } 
} 
18> gradesTimeline[0][0]=10 
19> gradesTimeline[1][2]=20 
20> gradesTimeline 
$R4: [[Int]] = 2 values { 
    [0] = 3 values { 
    [0] = 10 
    [1] = 0 
    [2] = 0 
    } 
    [1] = 3 values { 
    [0] = 0 
    [1] = 0 
    [2] = 20 
    } 
} 
+1

Так что, думаю, версия 'repeatValue' работает только для 1-мерные массивы (поскольку ваше решение является просто сокращением цикла 'for')? –

+1

Ох. Я понял это за ночь и теперь вижу, что вы нашли тот же ответ :-) –

Смежные вопросы