Função de matriz genérica rápida para encontrar todos os índices de elementos que não correspondem ao item
Swift 3
Tentando escrever uma extensão de matriz genérica que obtém todos os índices de itens que NÃO têm o mesmo valor
exemplo
let arr: [String] = ["Empty", "Empty", "Full", "Empty", "Full"]
let result: [Int] = arr.indexes(ofItemsNotEqualTo item: "Empty")
//returns [2, 4]
Eu tentei fazer uma função 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
}
}
Mas isso dá um aviso:O operador binário não pode ser aplicado a operandos do tipo "Elemento" e "T".
Então, eu fiz isso onde lancei o elemento (observe oComo?)
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
}
}
Mas agora parece que a verificação de tipo saiu pela janela, porque se eu passar um número inteiro, obtenho o resultado errado
let arr: [String] = ["Empty", "Empty", "Full", "Empty", "Full"]
let result: [Int] = arr.indexes(ofItemsNotEqualTo item: 100)
//returns [0, 1, 2, 3, 4]
A ajuda seria muito apreciada.
Existe uma maneira melhor de fazer isso com oreduzir função?