2017-04-17 36 views
1

我想獲得三個包含三個或更少的對象的數組。我有一個名爲Product的類和一個有9個產品或更少的Firebase下載的數組,因此我想要生成三個數組,每個數組都有三個不同的產品。這是我有:如何獲得三個包含三個或更少對象的數組?

var products = [Product]() 
products = [product1, product2, product3, product4, product5, product6, product7, product8, product9] 

這是我想要得到什麼:

array1 = [product1, product2, product3] 
array2 = [product4, product5, product6] 
array3 = [product7, product8, product9] 

在某些情況下,命名的產品陣列將擁有多項產品小於9,所以我必須創建這些陣列自動包含3個或更少的產品。 我這樣做是因爲我的代碼必須生成一個內部有三個數組的數組,每個數組都有三個或更少的產品,以便在tableview [[Product]]內的集合視圖中顯示。

回答

1

您可以通過使用帶有範圍的[]運算符來對數組進行切片。請注意,這會返回一個視圖到原來的排列,所以如果你想要一個副本你通過切片陣列()創建一個新副本:

let numbers:[Int] = stride(from: 1, to: 10, by: 1).map{$0} 
print(numbers.count) 
let first = Array(numbers[0...2]) 
let second = Array(numbers[3...5]) 
let third = Array(numbers[6...8]) 
print(first, second, third) 

要轉換任意長度的數組分成若干陣列與3個元素或更少:

let numbers:[Int] = stride(from: 1, to: 14, by: 1).map{$0} 
var bins: [[Int]] = [] 
for index in stride(from: 0, to: numbers.count, by: 3) { 
    let endIndex = min(index + 2, numbers.count - 1) 
    bins.append(Array(numbers[index...endIndex])) 
} 
print(bins) 
0

古斯塔沃期望額外變量包含空陣列時有少於6分或3的產品。

這應該這樣做:

let productsBy3 = (0..<3).map{ i in products.indices.filter{$0/3==i}.map{products[$0]}} 
+0

太感謝你了,它的作品! –

相關問題