todos taylor singles reputation que premios premiaciones nominaciones los importantes grammy gano dress album swift

que - taylor swift singles reputation



¿Cómo puedo encontrar el índice de un artículo en Swift? (7)

Esta pregunta ya tiene una respuesta aquí:

¿Hay un método llamado indexof o algo similar?

var array = ["Jason", "Charles", "David"] indexOf(array, "Jason") // Should return 0


EDITAR: a partir de Swift 3.0, debe usar el .index(where:) lugar y seguir el cambio en la edición de Swift 2.0 a continuación.

EDITAR: a partir de Swift 2.0, debe usar el método indexOf lugar. También devuelve nil o el primer índice de su argumento.

if let i = array.indexOf("Jason") { print("Jason is at index /(i)") } else { print("Jason isn''t in the array") }

Use la función de find . Devuelve nil (si no se encuentra el valor) o el primer índice del valor en la matriz.

if let i = find(array, "Jason") { println("Jason is at index /(i)") } else { println("Jason isn''t in the array") }


En Swift 2.0 (Xcode 7.1b), puede usar

if let result = array.indexOf("Jason")

while find(array, "Jason") está en desuso.


Hice esta función como la anterior, pero devuelve una matriz de índices

extension Array { func indexesOf<T : Equatable>(object:T) -> [Int] { var result: [Int] = [] for (index,obj) in enumerate(self) { if obj as T == object { result.append(index) } } return result } }

Tal vez te sea útil


La matriz se puede unir a una NSArray, por lo que puede usar:

array.bridgeToObjectiveC().indexOfObject("Jason")


Puede agregar una extensión de matriz que hace exactamente lo que desea, es decir:

extension Array { func indexOf<T : Equatable>(x:T) -> Int? { for i in 0..self.count { if self[i] as T == x { return i } } return nil } }

Que ahora te permite usar .indexOf() en todas las matrices Swift, por ejemplo:

["Jason", "Charles", "David"].indexOf("Jason") //0


Si bien la respuesta de Max es excelente, no le permite encontrar múltiples índices de múltiples objetos, es decir. índices del subconjunto de la matriz. Si necesita esa funcionalidad, las extensiones son, como siempre, su mejor amigo

func indexesOfSubset<T : Equatable>(objects : [T]) -> [Int] { // Create storage for filtered objectsand results var unusedObjects = objects var result : [Int] = [] // Enumerate through all objects in array for (index, obj) in enumerate(self) { // Enumerate again through all objects that has not been found for x in unusedObjects { // If we hit match, append result, remove it from usused objects if obj as! T == x { result.append(index) unusedObjects = unusedObjects.filter( { $0 != x } ) break } } } // Get results return result }

Nota *: funciona en Swift 1.2, si desea compatibilidad con 1.1, reemplace como! -> como


Una extensión de Array puede hacer maravillas aquí. Aquí hay una implementación compartida en esta respuesta de :

extension Array { func find (includedElement: T -> Bool) -> Int? { for (idx, element) in enumerate(self) { if includedElement(element) { return idx } } return nil } }