我在創建一個接受陣列并回傳二維陣列的函式時遇到問題。例如 [1,2,3,4,5,6] = [[1,2],[3,4],[5,6]]。
到目前為止,我只有:
func spiltArray(numbers:[Int])->[[Int]]{
}
uj5u.com熱心網友回復:
func spiltArray(numbers:[Int])->[[Int]]{
var result:[[Int]] = []
if numbers.count == 0{
return result
}
let split = 2
var arr:[Int] = []
for item in numbers{
if(arr.count>=split){
result.append(arr)
arr = []
}
arr.append(item)
}
result.append(arr)
return result
}
uj5u.com熱心網友回復:
完成你想要的最好的方法是使用 Swift 型別(序列的元素是惰性計算的UnfoldSequence),如本文所示。如果您需要一組子序列,您可以初始化展開的子序列。如果您需要一個陣列陣列,您可以映射展開的子序列,為每個子序列初始化一個新陣列:
extension Collection {
func unfoldSubSequences(limitedTo maxLength: Int) -> UnfoldSequence<SubSequence,Index> {
sequence(state: startIndex) { start in
guard start < self.endIndex else { return nil }
let end = self.index(start, offsetBy: maxLength, limitedBy: self.endIndex) ?? self.endIndex
defer { start = end }
return self[start..<end]
}
}
func subSequences(of n: Int) -> [SubSequence] {
.init(unfoldSubSequences(limitedTo: n))
}
func subArrays(of n: Int) -> [[Element]] {
unfoldSubSequences(limitedTo: n).map([Element].init)
}
}
let nums = [1,2,3,4,5,6]
for subSequence in nums.unfoldSubSequences(limitedTo: 2) {
print(subSequence)
for element in subSequence {
print(element)
}
}
這將列印:
[1, 2]
1
2
[3, 4]
3
4
[5, 6]
5
6
如果您需要結果是陣列陣列[[Int]]:
let subArrays = nums.subArrays(of: 2)
subArrays // [[1, 2], [3, 4], [5, 6]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/416301.html
標籤:
