Start learning free

LESSON 168 OF 415 · PROJECTS: EVERYDAY PROGRAMS

Shopping Cart V6 - Group by Category in Swift

Practice

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 totals that 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 (so Clothes comes before Food).
  • Join the lines with a newline "\n" into one string result, then print it with print(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)

STEP 1 OF 10
    Ctrl + Enter to check

    Shopping Cart V6 in Swift

    Keep going with SwiftAbout 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free