gpt4 book ai didi

arrays - 从二维数组中获取列——如何限制扩展中的数组类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:50 27 4
gpt4 key购买 nike

我想在 Swift 中扩展 Array 以返回二维数组的每个数组或列中的单个元素。到目前为止,我有:

extension Array where // what goes here?
func getColumn( column: Int ) -> [ Int ] {
return self.map { $0[ column ] }
}
}

我认为我需要以某种方式在 where 之后指定一个二维数组,但我一直无法找到正确的方法。

where 之后指定二维数组的正确语法是什么?

我也很好奇是否有很好的文档说明如何在扩展生命周期的 where 之后指定可用的内容。我在 Apple's Swift extension documentation 找不到那个

提前致谢。

最佳答案

您需要限制数组的 Element 类型。下标方法定义在CollectionType协议(protocol)中:

public protocol CollectionType : Indexable, SequenceType {
// ...
public subscript (position: Self.Index) -> Self.Generator.Element { get }
// ...
}

因此你可以为元素为集合的数组定义一个扩展方法:

extension Array where Element : CollectionType {
func getColumn(column : Element.Index) -> [ Element.Generator.Element ] {
return self.map { $0[ column ] }
}
}

例子:

let a = [[1, 2, 3], [4, 5, 6]]
let c = a.getColumn(1)

print(c) // [2, 5]

您甚至可以将其定义为附加的订阅方法:

extension Array where Element : CollectionType {
subscript(column column : Element.Index) -> [ Element.Generator.Element ] {
return map { $0[ column ] }
}
}

let a = [["a", "b", "c"], [ "d", "e", "f" ]]
let c = a[column: 2]
print(c) // ["c", "f"]

Swift 3 的更新:

extension Array where Element : Collection {
func getColumn(column : Element.Index) -> [ Element.Iterator.Element ] {
return self.map { $0[ column ] }
}
}

或作为下标:

extension Array where Element : Collection {
subscript(column column : Element.Index) -> [ Element.Iterator.Element ] {
return map { $0[ column ] }
}
}

关于arrays - 从二维数组中获取列——如何限制扩展中的数组类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53026192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com