Comment parcourir tableau d'objets dans Swift?

j'ai objets

var person1 = Person()
person1.name = "Joe"
person1.lastName = "Doe"
person1.age = 21

var person2 = Person()
person2.name = "Julia"
person2.lastName = "Ivanova"
person2.age = 22

var person3 = Person()
person3.name = "Irina"
person3.lastName = "Petrova"
person3.age = 25

var person9 = Person()
person9.name = "Vova"
person9.lastName = "Vovin"
person9.age = 32

var person10 = Person()
person10.name = "Masha"
person10.lastName = "Golovanova"
person10.age = 20

var person11 = Person()
person11.name = "Petra"
person11.lastName = "Andreeva"
person11.age = 27

et multi array

var array = [[person1, person2, person3], [person9, person10, person11]]

comment puis-je parcourir tableau pour obtenir par exemple une personne avec nom="Masha"

merci d'avance

27
demandé sur Alexey K 2015-07-27 14:53:50

5 réponses

je voudrais essayer ceci:

var array:[[Person]] = [[person1, person2, person3], [person9, person10, person11]]
/*Casting it like this should keep from getting an error later 
   and/or having to recast the objects*/

for people in array {

/*This is going to look at each array in arrays, 
   and call each one 'people' within this loop*/

    for person in people {

    /*Same thing, this is going to look at each item in the people array
       and call each one 'person' within this loop*/

        if person.name == "Masha" {
            return person
        }
    }
}
49
répondu Rachel Harvey 2015-09-17 20:21:15

une façon intéressante de résoudre ce problème serait de tirer parti de la fonction flatMap de Swift.

var array = [[person1, person2, person3], [person9, person10, person11]]

let flatArray = array.flatMap {  }

flatArray est maintenant [person1, person2, person3, person9, person10, person11] de type Array<Person>.

puis vous pouvez itérer sur flatArray pour trouver ce que vous voulez:

for person in flatArray {
    if person.name == "Masha" {
        // Do something
    }
}

vous pouvez même aller plus loin en utilisant Swift 2.0 parce qu'il vous permet de mettre une clause où dans le for :

for person in flatArray where person.name == "Masha" {
    // Do something
}
19
répondu Fantattitude 2015-07-27 12:10:59

Voici la technique qui s'appelle 'Chaining'

aire de jeux. Swift 3.1

import UIKit

class Person {
    var name = ""
    var lastName = ""
    var age = 0
}

var person1 = Person()
person1.name = "Joe"
person1.lastName = "Doe"
person1.age = 21

var person2 = Person()
person2.name = "Julia"
person2.lastName = "Ivanova"
person2.age = 22

var person3 = Person()
person3.name = "Irina"
person3.lastName = "Petrova"
person3.age = 25

var person9 = Person()
person9.name = "Vova"
person9.lastName = "Vovin"
person9.age = 32

var person10 = Person()
person10.name = "Masha"
person10.lastName = "Golovanova"
person10.age = 20

var person11 = Person()
person11.name = "Petra"
person11.lastName = "Andreeva"
person11.age = 27

var array = [[person1, person2, person3], [person9, person10, person11]]

array
    .flatMap{}
    .forEach { (anyPerson:Person) in

        if anyPerson.name == "Masha" {
            //Do what you need
            print(anyPerson.lastName)
        }
}

capture d'Écran du terrain de jeu: enter image description here

15
répondu Alexey Bondarchuk 2017-05-09 12:10:05

Itération peut être fait comme dans @Rachel réponse. Cependant, il existe différentes façons de faire la même chose, et pas nécessairement en itérant - et dans certains cas avec une seule ligne de code.

Si vous voulez trouver, alors le meilleur moyen est d'utiliser le tableau filter méthode-mais avant cela le tableau multidimensionnel devrait être aplati, en utilisant flatMap.

ainsi, pour trouver le premier élément ayant un certain nom, vous pouvez simplement faire:

let result: Person? = array.flatMap {  }.filter { .name == "Masha" }.first
9
répondu Antonio 2015-07-27 12:09:29

swift 3:

 forEach({element in
   // do what you need
 })
4
répondu Amjad Tubasi 2017-02-28 14:34:30