0
struct Person {
    var name: String
    var age: Int
    var weight : Int
    var shoeSize: Int
}


struct Group {
    var members : [Person]
}

let mygroup = Group(members: [
    Person(name: "Billy", age: 59, weight: 170, shoeSize: 9),
    Person(name: "Jacob", age: 19, weight: 130, shoeSize: 11),
    Person(name: "Zara", age: 25, weight: 320, shoeSize: 10)
])

How can I multiple each age by 2, and return a new array (myGroupV2), but leave the other elements untouched?

0

4 Answers 4

4

You simply need to use map to apply a closure to each element of an Array. In your map closure, you need to initialise a new Person instance, where all inputs are the same as the properties of the original Person, except for age, which you multiply by 2.

let myGroup2 = Group(members: mygroup.members.map { Person(name: $0.name, age: $0.age * 2, weight: $0.weight, shoeSize: $0.shoeSize) })
Sign up to request clarification or add additional context in comments.

Comments

2

Instead of individually assigning all the properties of Person, you can simply create a new Person instance and change its age property, i.e.

let myGroupV2 = mygroup.members.map {(person) -> Person in
    var person = person
    person.age *= 2
    return person
}

Comments

0

In case you need it more than once, an extention can also be helpful:

extension Person {
    var asDoubleAged: Person {
        get {
            return Person(name: self.name, age: self.age * 2, weight: self.weight, shoeSize: self.shoeSize)
        }
    }
}

let myGroupV2 = Group(members: mygroup.members.map { $0.asDoubleAged })

Comments

0
let personArray = mygroup.members.map { p in Person(name: p.name, age: p.age*2, weight: p.weight, shoeSize: p.shoeSize) }

let mygroup2=Group(members: personArray)

or

let mygroup2 = Group(members: mygroup.members.map { Person(name: $0.name, age: $0.age*2, weight: $0.weight, shoeSize: $0.shoeSize)})

1 Comment

What is the difference from David's answer?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.