我的数组类型为[[Int]]
array = [[1,2,3],
[4,5,6],
[7,8,9,10],
[11,12,13],
[14,15,16]]
我希望转置结果为:
array = [[1,4,7,11,14],
[2,5,8,12,15],
[3,6,9,13,16],
[0,0,10,0,0]]
如何将0填充到没有相等行或列映射的数组。
我希望转置适用于具有不相等映射元素的行和列。请帮忙。
答案 0 :(得分:1)
你应该试试这个:
Swift 3
var array = [[1,2,3,4],[5,6,7,8],[9,10,11],[12,13,14]]
var arraytrans = [[Int]]()
override func viewWillAppear(_ animated: Bool)
{
for i in stride(from: 0, to: array.count, by: 1)
{
var subArray = [Int]()
for j in stride(from: 0, to: array.count, by: 1)
{
if array[i].count < array.count
{
array[i].append(0)
}
subArray.append(array[j][i])
}
arraytrans.append(subArray)
}
print(self.arraytrans)
}
答案 1 :(得分:1)
谢谢..! @Pragnesh Vitthani我刚刚修改了你的答案。
v0.3.5
答案 2 :(得分:0)
这是实现您想要的功能的实现:
func transpose(_ input: [[Int]]) -> [[Int]] {
let columns = input.count
let rows = input.reduce(0) { max($0, $1.count) }
var result: [[Int]] = []
for row in 0 ..< rows {
result.append([])
for col in 0 ..< columns {
if row < input[col].count {
result[row].append(input[col][row])
} else {
result[row].append(0)
}
}
}
return result
}
就个人而言,我建议不要使用诸如0
之类的任意哨兵值,并且我将结果数组中的值设为可选,其中nil
表示没有值。我可能会把它设为通用方法:
func transpose<T>(_ input: [[T]]) -> [[T?]] {
let columns = input.count
let rows = input.reduce(0) { max($0, $1.count) }
var result: [[T?]] = []
for row in 0 ..< rows {
result.append([])
for col in 0 ..< columns {
if row < input[col].count {
result[row].append(input[col][row])
} else {
result[row].append(nil)
}
}
}
return result
}
答案 3 :(得分:0)
基于@Rob 解决方案的通用版本:
func transpose<T>(_ input: [[T]], defaultValue: T) -> [[T]] {
let columns = input.count
let rows = input.reduce(0) { max($0, $1.count) }
return (0 ..< rows).reduce(into: []) { result, row in
result.append((0 ..< columns).reduce(into: []) { result, column in
result.append(row < input[column].count ? input[column][row] : defaultValue)
})
}
}
用法:调用 transpose(srings, defaultValue: "")
或 transpose(integers, defaultValue: 0)
。