Как я должен использовать массив словаря swift, чтобы получить все значения? - PullRequest
0 голосов
/ 28 ноября 2018

Мой словарь выглядит так:

["Coke": ["1", "80"], "Appetizer": ["3", "70"], "Water": ["4", "70"],

"Noodle": ["2", "40"], "Pizza": ["7", "80"],  "Steak": ["7", "60"]]

Значение является массивом, оно включает в себя два значения

первое число соответствует количеству заказанного вами элемента

второечисло похоже на промежуточный итог

Мне просто интересно, как мне получить второе число и сохранить в новую переменную?

, потому что мне нужно добавить все числа, чтобы представить общую стоимость

Ответы [ 4 ]

0 голосов
/ 28 ноября 2018
let dict = ["Coke": ["1", "80"], "Appetizer": ["3", "70"], "Water": ["4", "70"], "Noodle": ["2", "40"], "Pizza": ["7", "80"],  "Steak": ["7", "60"]]

Короткий ответ (непосредственно для вашего вопроса)

var price = dict.values.reduce(0, { $0 + Double($1[0])! * Double($1[1])! }) // If you need only the price, remove the multiplier
print(price) //1630.0

Длинный ответ

Как всегда предлагается в SO, вы должны создать модель данных для хранения вашей информации.В этом случае это будет выглядеть примерно так:

struct Bill {
    var item: String
    var amount: Int
    var price: Double
}

// For the sake of the example i'll convert your dictionary into Price
var billArray: [Bill] = []
for (key, value) in dict {
    billArray.append(Bill(item: key, amount: Int(value[0]) ?? 0, price: Double(value[1]) ?? 0))
}

// The actual solution that you apply to the price array
var totalBill = billArray.reduce(0, { $0 + Double($1.amount) * $1.price}) // If you need only the price, remove the multipler amount
print(totalBill) //1630.0
0 голосов
/ 28 ноября 2018

Этот код должен работать

let dict:[String:[String]] =  ["Coke": ["1", "80"], "Appetizer": ["3", "70"], "Water": ["4", "70"], "Noodle": ["2", "40"], "Pizza": ["7", "80"],  "Steak": ["7", "60"]]

if let val:String = dict["Coke"]?[1] {
    print(val)
}
0 голосов
/ 28 ноября 2018

Давайте назовем наши словарные продукты:

let products = ["Coke": ["1", "80"], "Appetizer": ["3", "70"], "Water": ["4", "70"],
    "Noodle": ["2", "40"], "Pizza": ["7", "80"],  "Steak": ["7", "60"]]    

Вы можете извлечь значения, используя методы значений.

let productValues = products.values

На данный момент productValues тип равен [[String]]

получить массив второго элемента, который вы можете использовать .map()

let secondItems = productsValues.map { $0[1] }

Последняя часть немного сложна, потому что вы используете строку, но вы можете использовать flatMap иreduce для суммирования значений

let result = secondItems.flatMap { Int($0) }.reduce(0, +)
0 голосов
/ 28 ноября 2018

Вы получаете доступ к словарю, как это:

dict["Coke"]

это вернет:

["1", "80"]

, если вы хотите получить второй элемент списка, вы просто делаете следующее:

dict["Coke"][1]
...