2016-04-19 4 views
1

У меня есть массив с 8 элементами. Я хочу скопировать элементы один за другим, пока количество новых массивов не достигнет 30 раз.Iterate Array 30 раз, используя For loop

Я использовал для цикла, и в то время как результат копировал только первый элемент 30 раз.

let myShift = ["D12","E","N12","N","Off","Rest1","Rest2","D"] 
var myArray = [String]() 
for i in myShift { 
while myArray.count != 30 { 
    myArray.append(i) 
}} 

Я прочитал несколько примеров о карте, которую я попытался использовать, но это не сработало.

+0

Вы хотите скопировать каждый элемент в 30 раз? Это оно ? Извините, я не понимаю, что вы имеете в виду. Пожалуйста, уточните. –

+1

Это 8 элементов ... – LinusGeffarth

+0

Я хочу скопировать весь элемент один за другим, пока счет нового массива не достигнет 30. –

ответ

2

Поскольку это не очень понятно, что вы ищете, здесь есть два варианта.

Это будет повторяться содержимое массива, пока оно не достигнет 30 элементов. Он будет сохранять свой порядок и зацикливать их. Это приводит к массиву с 30 элементами.

let myShift = ["D12","E","N12","N","Off","Rest1","Rest2","D"] 
var myArray = [String]() 
(0..<30).forEach { 
    myArray.append(myShift[$0 % myShift.count]) 
} 

Это приведет к массиву с каждым элементом, который повторяется 30 раз, в общей сложности 240 элементов.

let myShift = ["D12","E","N12","N","Off","Rest1","Rest2","D"] 
let array = [[String]](count: 30, repeatedValue: myShift).flatMap { $0 } 
0

Попробуйте это:

let myShift = ["D12","E","N12","N","Off","Rest1","Rest2","D"] 
    var myArray = [Array]() 
    while myArray.count < 31 { 
     myArray.append(myShift) 
    }} 
0

Вы могли бы сделать что-то вроде этого:

let myShift = ["D12","E","N12","N","Off","Rest1","Rest2","D"] 
var myArray = [String]() 

for i in myShift { 
    myArray.appendContentsOf(Array(count: 30, repeatedValue: i)) 
} 
0

Таким образом, вместо того, чтобы использовать while и for петлю, мне нравится использовать старый добрый двойной for -loop.
Следующий код производит массив с 240 элементами (8 * 30 = 240).

let myShift = ["D12","E","N12","N","Off","Rest1","Rest2","D"] 
var newArray = myShift 

for i in 1...30 { 
    for str in myShift { 
     newArray.append(str) 
    } 
} 

площадка утверждает: playground

Надеется, что это помогает :)