Use a dictionary to accumulate totals per category while looping over parallel arrays, then list the categories sorted by name.
You start with:
let items = ["Apple", "Bread", "Shirt", "Banana", "Pants"]
let prices = [2, 3, 25, 1, 40]
let categories = ["Food", "Food", "Clothes", "Food", "Clothes"]
Build:
Clothes: $65 Food: $6
Rules:
- Build a dictionary
totalsthat maps each category to the sum of the prices of its items. - Loop with an index. For each item, add its price to the total of
categories[i]; a category you have not seen yet counts as 0. - Make one line per category, in the format
"Category: $total", sorted alphabetically by category name (soClothescomes beforeFood). - Join the lines with a newline
"\n"into one stringresult, then print it withprint(result).
Use
totals[cat, default: 0] += prices[i] to accumulate without checking for missing keys.
Use
totals.keys.sorted() to get the keys in alphabetical order.
let items = ["Apple", "Bread", "Shirt", "Banana", "Pants"]
let prices = [2, 3, 25, 1, 40]
let categories = ["Food", "Food", "Clothes", "Food", "Clothes"]
var totals = [String: Int]()
for i in items.indices {
let category = categories[i]
totals[category, default: 0] += prices[i]
}
var lines = [String]()
let keys = totals.keys.sorted()
for category in keys {
lines.append("\(category): $\(totals[category]!)")
}
let result = lines.joined(separator: "\n")
print(result)
Free plan: 30 tutor messages. Premium is unlimited.
Saved
Ctrl + Enter to check
