web-dev-qa-db-fra.com

Trouver l'index du tableau d'objets

Je ne peux pas comprendre comment trouver l'index d'un objet dans un tableau. Par exemple, j'ai cette structure de données:

class Person {
var name: String
var age: Int

init(name personName: String, age personAge: Int) {
    self.name = personName
    self.age = personAge
  }
}

let person1 = Person(name: "person1", age: 34)
let person2 = Person(name: "person2", age: 30)
...
var personsArray = [person1, person2, ...]

J'ai essayé d'utiliser personsArray.index(where: ....) mais je ne comprends pas comment l'utiliser. index(of: ...) ne fonctionne pas. Je pense que parce que personsArray n'est pas conforme au protocole Equatable ...

6
makedonskii
index(of: )

obtient la personne dans votre cas - c'est une fonction générique.

index(where: ) 

obtient la condition pour laquelle vous voulez trouver une personne particulière

Ce que tu pourrais faire:

personsArray.index(where: { $0.name == "person1" })

Ou vous pouvez envoyer un objet à:

personsArray.index(of: existingPerson)

Pour les deux options, vous pouvez obtenir zéro - vous devrez le vérifier (ou le garder).

14
Miknash

De mon point de vue, comparez avec ===

Petit exemple.

func getPersonIndex(from: [Person], user: Person) -> Int? {
    return from.index(where: { $0 === user })
}

getPersonIndex(from: personsArray, user: person2)
1
Oleg Gordiichuk

J'ai trouvé comment utiliser .index(where... 

personsArray.index { (item) -> Bool in item.name == "person2" && item.age == 30 }

0
makedonskii