swift - 通用二维数组上的 Swift 方法
问题描述
当数组是二维数组时,我想在 Array 类型上创建一个扩展方法,例如。[[Int]]
,但类型应该是通用的。我正在尝试做这样的事情:
extension Array [where Element : ???] {
public func transposed() -> ??? {
// ...
}
}
解决方案
这在 Swift 4 中有效。
extension Array where Element: Collection {
public func transposed() -> [[Element.Iterator.Element]] {
var result : [[Element.Iterator.Element]] = [[]]
for row in self {
for (y,column) in row.enumerated() {
while (result.count <= y) {
result.append([])
}
result[y].append(column)
}
}
return result
}
}
然后单元测试也通过了:
func testTransposed() {
XCTAssertEqual([[1]].transposed(), [[1]])
XCTAssertEqual([[1,2,3],[4,5]].transposed(), [[1,4],[2,5],[3]])
XCTAssertEqual([[4,1],[5,2],[3]].transposed(),[[4,5,3],[1,2]])
XCTAssertEqual([[1,2,3]].transposed(), [[1],[2],[3]])
XCTAssertEqual([[1],[2],[3]].transposed(),[[1,2,3]])
}
推荐阅读
- ios - Swift 在后台线程中按顺序异步运行多个代码块
- c# - 仅当条件为真时,是否有从函数返回的单行语句?
- java - 无法访问 ArrayList 的 ArrayLists(通用)
- ibm-watson - 提高语音转文本的准确性 [IBM Watson]
- angular - 不能展开角材料表
- wysiwyg - shift+Enter 的 execCommand 是什么?
- javascript - 如何使用外部 javascript 文件在 html 中加载类似 Cheerio 的内容?
- python - 从 df 创建一个包含两个特征的新数据框,其中行以一个特征为条件
- seq - in 运算符,用于在 Dafny 中比较奇怪的序列
- java - 将 Context 作为参数传递给 Singleton 类中的方法会导致内存泄漏