DesperateLearner
DesperateLearner

Reputation: 1175

Map an array with a function with two arguments - Swift

Is it possible to map an array with a function that takes in two arguments? Something like this:

let arr = [2,5,1,4,8,4]
let bankRateArr = arr.map(BankRate.init(amount:interestRate:))

class BankRate {
    let amount: Int
    let interestRate: Float

    init(amount: Int, interestRate: Float) {
        self.amount = amount
        self.interestRate = interestRate
    }
}

Upvotes: 3

Views: 2328

Answers (2)

Tomasz Pe
Tomasz Pe

Reputation: 716

Assuming that you will have two separate arrays

let amounts = [2, 5, 1, 4 ,8 ,4]
let rates: [Float] = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]

you could use

let bankRates = zip(amounts, rates).map(BankRate.init)

Upvotes: 2

rmaddy
rmaddy

Reputation: 318814

If you want to pass the same interest rate to all values, you can do:

class BankRate: CustomStringConvertible {
    let amount: Int
    let interestRate: Float
    init(amount: Int, interestRate: Float){
        self.amount = amount
        self.interestRate = interestRate
    }

    var description: String {
        return "amount: \(amount), rate: \(interestRate)"
    }
}

let arr = [2, 5, 1, 4, 8, 4]
let bankRateArr = arr.map { BankRate(amount: $0, interestRate: 0.04) }
print(bankRateArr)

Output:

[amount: 2, rate: 0.04, amount: 5, rate: 0.04, amount: 1, rate: 0.04, amount: 4, rate: 0.04, amount: 8, rate: 0.04, amount: 4, rate: 0.04]

If you want each to have their own, you can do it with tuples:

let arr2 = [(2, 0.04), (5, 0.07), (1, 0.1), (4, 0.035), (8, 0.25), (4, 0.2)]
let bankRateArr2 = arr2.map { BankRate(amount: $0.0, interestRate: Float($0.1)) }
print(bankRateArr2)

Output:

[amount: 2, rate: 0.04, amount: 5, rate: 0.07, amount: 1, rate: 0.1, amount: 4, rate: 0.035, amount: 8, rate: 0.25, amount: 4, rate: 0.2]

And thanks to Martin R, the 2nd example can be shorted a bit as:

let arr3: [(Int, Float)] = [(2, 0.04), (5, 0.07), (1, 0.1), (4, 0.035), (8, 0.25), (4, 0.2)]
let bankRateArr3 = arr3.map(BankRate.init)
print(bankRateArr3)

Upvotes: 4

Related Questions