如何在 Swift 3 中转置不等数组长度的矩阵
How to transpose a matrix of unequal array length in Swift 3
我的数组是[[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 填充到没有相等行或列映射的数组。
我希望转置适用于具有不相等映射元素的行和列。请帮忙。
你应该试试这个:
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)
}
谢谢..! @Pragnesh Vitthani 我刚刚修改了你的答案。
var array = [[1,2,3],
[4,5,6],
[7,8,9,10],
[11,12,13],
[14,15,16]]
var transposedArray = [[Int]]
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[j].count < array.count
{
array[j].append(0)
}
subArray.append(array[j][i])
}
transposedArray.append(subArray )
}
print(transposedArray)
这是一个可以满足您要求的实现:
func transpose(_ input: [[Int]]) -> [[Int]] {
let columns = input.count
let rows = input.reduce(0) { max([=10=], .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
}
或者,或者:
func transpose(_ input: [[Int]]) -> [[Int]] {
let columns = input.count
let rows = input.reduce(0) { max([=11=], .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] : 0)
})
}
}
基于@Rob 解决方案的通用版本:
func transpose<T>(_ input: [[T]], defaultValue: T) -> [[T]] {
let columns = input.count
let rows = input.reduce(0) { max([=10=], .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)
。
我的数组是[[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 填充到没有相等行或列映射的数组。
我希望转置适用于具有不相等映射元素的行和列。请帮忙。
你应该试试这个:
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)
}
谢谢..! @Pragnesh Vitthani 我刚刚修改了你的答案。
var array = [[1,2,3],
[4,5,6],
[7,8,9,10],
[11,12,13],
[14,15,16]]
var transposedArray = [[Int]]
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[j].count < array.count
{
array[j].append(0)
}
subArray.append(array[j][i])
}
transposedArray.append(subArray )
}
print(transposedArray)
这是一个可以满足您要求的实现:
func transpose(_ input: [[Int]]) -> [[Int]] {
let columns = input.count
let rows = input.reduce(0) { max([=10=], .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
}
或者,或者:
func transpose(_ input: [[Int]]) -> [[Int]] {
let columns = input.count
let rows = input.reduce(0) { max([=11=], .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] : 0)
})
}
}
基于@Rob 解决方案的通用版本:
func transpose<T>(_ input: [[T]], defaultValue: T) -> [[T]] {
let columns = input.count
let rows = input.reduce(0) { max([=10=], .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)
。