你可以使用自定義函數extension
獲得專欄。
細胞:
struct Cell{
var id:Int?
var fruit:String?
init(id:Int?,fruit:String?){
self.id = id
self.fruit = fruit
}
}
2D陣列:
var grid = [[Cell]]()
插入值(10×10矩陣):
for i in 0...9{
var row = [Cell]()
for j in 0...9{
let cell = Cell(id: (i*10)+j, fruit: "Mango \(String(i))")
row.append(cell)
}
self.grid.append(row)
}
現在,網格變,
要提取矩陣的所有行7列,
for (index,_) in self.grid.enumerated(){
print(self.grid[index][7])
}
靈活的方式:
雨燕3.0的擴展:
extension Sequence where Iterator.Element == [Cell]{ //Swift 3.0
func getColumn(_ column:Int)->[Cell]?{
var cell = [Cell]()
for value in self{
if value.count > column{
cell.append(value[column])
}else{
return nil
}
}
return cell
}
}
斯威夫特4。0擴展:
extension Array where Element == [Cell]{
func getColumn(_ column:Int) -> [Cell]? {
var cell = [Cell]()
for (index,_) in self.enumerated(){
if index > column {
cell.append(self[index][column])
} else {
return nil
}
}
return cell
}
}
獲得列:
一個)
print(self.grid.getColumn(7) ?? "Column not found")
B)
if let columnArray = self.grid.getColumn(7){
for cell in columnArray{
print(cell)
}
}else{
print("Column not found!")
}
輸出:
一個)
B)
細胞(ID:7,水果:芒果0)
細胞(ID:17,水果:芒果1 )
Cell(id:27,fruit:Mango 2)
細胞(ID:37,水果:芒果3)
細胞(ID:47,水果:芒果4)
細胞(ID:57,水果:芒果5)
細胞( ID:67,水果:芒果6)
細胞(ID:77,水果:芒果7)
細胞(ID:87,水果:芒果8)
細胞(ID:97,FR uit:芒果9)
讓我知道你需要嗎?
比較https://stackoverflow.com/questions/35244584/get-column-from-2d-array-how-to-restrict-array-type-in-extension –
謝謝。看起來我需要深入瞭解Swift中的集合。 –
你引用的答案不會以同樣的方式(按照我的問題)處理行和列,而是向集合添加一個擴展,它將列視爲與行根本不同的東西(並簡單地用行替換循環行等效映射函數)。行和列之間的區別純粹是二維數組在Swift中工作的方式。因此,我認爲應該有可能創建一個反映這一點的模型。 (我只是還沒有解決如何) –