Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数组元素的快速返回索引_Arrays_Swift - Fatal编程技术网

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}