Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 157 Vote(s) - 3.74 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to iterate through array of objects in Swift?

#1
i have objects

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

and multi array

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

how can I iterate through array to get for example a person with name="Masha"

thanks in advance
Reply

#2
# Swift 3:

forEach({ element in
// do what you need
})
Reply

#3
Here is a pretty simple way to do what you need:

let result = array
.flatMap { $0 }
.first(where: { $0.name == "Masha" })

First you have to make your array flatted and then you can just get the first element from the array that satisfies the given predicate (in our case, where `name` is equal to `"Masha"`).
Reply

#4
Here is technique which called 'Chaining'


*Playground*. **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{$0}
.forEach { (anyPerson:Person) in

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

Screen-shot from playground:
[![enter image description here][1]][1]


[1]:
Reply

#5
I would try this:

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
}
}
}
Reply

#6
An interesting way of solving this would be to leverage the flatMap function of Swift.

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

let flatArray = array.flatMap { $0 }

flatArray now is `[person1, person2, person3, person9, person10, person11]` of type `Array<Person>`.

Then you can iterate on flatArray to find what you want :

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

You could even go further by using Swift 2.0 because it allows you to put a where clause in the for :

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

#7
Iterating can be done as in @Rachel's answer. However there are different ways of doing the same thing, and not necessarily by iterating - and in some cases with just one line of code.

If you want to find, then the best way is using the array's `filter` method - but before that the multi dimensional array should be flattened, using `flatMap`.

So, to find the first element having a certain name, you can simply do:

let result: Person? = array.flatMap { $0 }.filter { $0.name == "Masha" }.first
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through