Función de matriz genérica rápida para encontrar todos los índices de elementos que no coinciden con el elemento
Swift 3
Intentando escribir una extensión de matriz genérica que obtenga todos los índices de elementos que NO tengan el mismo valor
ejemplo
let arr: [String] = ["Empty", "Empty", "Full", "Empty", "Full"]
let result: [Int] = arr.indexes(ofItemsNotEqualTo item: "Empty")
//returns [2, 4]
Traté de hacer una función genérica:
extension Array {
func indexes<T: Equatable>(ofItemsNotEqualTo item: T) -> [Int]? {
var result: [Int] = []
for (n,, elem) in self.enumerated() {
if elem != item {
result.append(n)
}
}
return result.isEmpty ? nil : result
}
}
Pero eso da una advertencia:El operador binario no se puede aplicar a operandos de tipo "Elemento" y "T".
Entonces hice esto donde lancé el elemento (tenga en cuenta el¿como?)
extension Array {
func indexes<T: Equatable>(ofItemsNotEqualTo item: T) -> [Int]? {
var result: [Int] = []
for (n, elem) in self.enumerated() {
if elem as? T != item {
result.append(n)
}
}
return result.isEmpty ? nil : result
}
}
Pero ahora parece que la verificación de tipo se ha ido por la ventana, porque si paso un número entero obtengo el resultado incorrecto
let arr: [String] = ["Empty", "Empty", "Full", "Empty", "Full"]
let result: [Int] = arr.indexes(ofItemsNotEqualTo item: 100)
//returns [0, 1, 2, 3, 4]
La ayuda sería muy apreciada.
¿Hay una mejor manera de hacer esto con elreducir ¿función?