Arrays 数组元素的快速返回索引
我想写一个遍历数组并返回找到该元素的索引的函数 比如:Arrays 数组元素的快速返回索引,arrays,swift,Arrays,Swift,我想写一个遍历数组并返回找到该元素的索引的函数 比如: extension Array { func elementIndexes<T>() -> [Int] { // if element is kind of class "T" add it to array [T] and then return } } 扩展数组{ func elementindex()->[Int]{ //如果元素是类“T”,则将其添加到数组[T],然后返回 }
extension Array {
func elementIndexes<T>() -> [Int] {
// if element is kind of class "T" add it to array [T] and then return
}
}
扩展数组{
func elementindex()->[Int]{
//如果元素是类“T”,则将其添加到数组[T],然后返回
}
}
然而,我没有成功。我该怎么做呢?这可能适合您:
extension Array {
func indices<T>(of: T.Type) -> [Int] {
return self.enumerated().flatMap { $0.element is T ? $0.offset : nil }
}
}
两者在游乐场中呈现相同的输出,即:
[2, 3]
这可能适合您:
extension Array {
func indices<T>(of: T.Type) -> [Int] {
return self.enumerated().flatMap { $0.element is T ? $0.offset : nil }
}
}
两者在游乐场中呈现相同的输出,即:
[2, 3]
听起来,为了澄清措辞,您希望获取元素类型为T的所有索引。下面是数组上的一个扩展,可以实现这一点,并提供一个示例:
extension Array {
func indices<T>(ofType type: T.Type) -> [Int] {
return self.enumerated().filter({ $0.element is T }).map({ $0.offset })
}
}
struct TypeA { }
struct TypeB { }
let list: [Any] = [TypeA(), TypeB(), TypeB(), TypeA()]
print(list.indices(ofType: TypeA.self)) // prints [0, 3]
扩展数组{
函数索引(类型:T.type)->[Int]{
返回self.enumerated().filter({$0.element为T}).map({$0.offset})
}
}
结构类型A{}
结构类型B{}
列表:[Any]=[TypeA(),TypeB(),TypeB(),TypeA()]
打印(list.index(of type:TypeA.self))//打印[0,3]
听起来,为了澄清措辞,您需要获取元素类型为T的所有索引。下面是数组上的一个扩展,可以实现这一点,并提供一个示例:
extension Array {
func indices<T>(ofType type: T.Type) -> [Int] {
return self.enumerated().filter({ $0.element is T }).map({ $0.offset })
}
}
struct TypeA { }
struct TypeB { }
let list: [Any] = [TypeA(), TypeB(), TypeB(), TypeA()]
print(list.indices(ofType: TypeA.self)) // prints [0, 3]
扩展数组{
函数索引(类型:T.type)->[Int]{
返回self.enumerated().filter({$0.element为T}).map({$0.offset})
}
}
结构类型A{}
结构类型B{}
列表:[Any]=[TypeA(),TypeB(),TypeB(),TypeA()]
打印(list.index(of type:TypeA.self))//打印[0,3]
您可以直接过滤索引,这是更通用的版本(归功于Leo Dabus
和Hamish
)
扩展集合{
函数索引(类型:T.type)->[索引]{
return index.filter{self[$0]是T}
}
}
您可以直接过滤索引,这是更通用的版本(归功于Leo Dabus
和Hamish
)
扩展集合{
函数索引(类型:T.type)->[索引]{
return index.filter{self[$0]是T}
}
}
因此,要澄清的是,您想过滤一个只获取T类型元素的数组?如果您想获取索引,为什么返回值是[T]
?@holex抱歉,我输入错误,我确实编辑了。当然,我需要索引。@vadian我想传递类类型,但不想传递任何类型。我想传递具体类型。所以说得很清楚,你想过滤一个数组,其中只获取类型为T的元素?如果你想获取索引,为什么返回值是[T]
?@holex抱歉,我键入错误,我确实编辑了。当然,我需要索引。@vadian我想传递类类型,但不想传递任何类型。我想传递具体的类型。index.lazy.filter
index.lazy.filter
@holex您可以指出我的1个输入错误,而不是该注释,我没有调试您的代码:刚刚测试过–然后失败。另一种选择:self.enumerated().flatMap{$0.element是T?$0.offset:nil}
@holex您可以指出我的1个输入错误,而不是那条评论。我没有调试您的代码:刚刚测试过–然后失败。另一种选择:self.enumerated().flatMap{$0.element是T?$0.offset:nil}