Bird
Raised Fist0
Swiftprogramming~5 mins

Sorted and custom comparators in Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the sorted() method do in Swift?
The sorted() method returns a new array with the elements sorted in ascending order by default.
Click to reveal answer
beginner
How do you use a custom comparator with sorted(by:) in Swift?
You provide a closure that takes two elements and returns true if the first element should be ordered before the second, otherwise false.
Click to reveal answer
beginner
Example: Sort an array of integers in descending order using sorted(by:).
Use <code>let sortedArray = array.sorted(by: { $0 > $1 })</code> to sort from highest to lowest.
Click to reveal answer
intermediate
Why use a custom comparator instead of the default sorted()?
A custom comparator lets you define your own sorting rules, like sorting strings by length or sorting objects by a property.
Click to reveal answer
intermediate
What is the type signature of the closure used in sorted(by:)?
The closure has type (Element, Element) -> Bool, where it compares two elements and returns true if the first should come before the second.
Click to reveal answer
What does array.sorted() return in Swift?
AThe original array sorted in place
BAn error if the array is not sorted
CA Boolean indicating if the array is sorted
DA new array sorted in ascending order
Which closure signature is correct for sorted(by:)?
A(Element, Element) -> Bool
B(Element) -> Bool
C(Element, Element) -> Element
D(Element) -> Element
How do you sort an array of strings by their length in ascending order?
Aarray.sorted()
Barray.sorted(by: { $0.count < $1.count })
Carray.sorted(by: { $0 > $1 })
Darray.sorted(by: { $0.count > $1.count })
What happens if you use sorted(by: { $0 < $1 })?
ACauses a runtime error
BSorts the array in descending order
CSorts the array in ascending order
DLeaves the array unsorted
Can sorted(by:) be used to sort arrays of custom objects?
AYes, by providing a closure comparing object properties
BNo, only basic types can be sorted
COnly if the objects conform to <code>Comparable</code>
DOnly if the array is mutable
Explain how to sort an array in Swift using a custom comparator.
Think about how you tell Swift the order you want.
You got /4 concepts.
    Describe the difference between sorted() and sorted(by:).
    One is simple, the other lets you decide the order.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the sorted(by:) method do in Swift?
      easy
      A. It sorts an array using a custom rule you provide.
      B. It removes duplicate elements from an array.
      C. It reverses the order of elements in an array.
      D. It filters elements based on a condition.

      Solution

      1. Step 1: Understand the purpose of sorted(by:)

        This method sorts elements of an array based on a closure that defines the order.
      2. Step 2: Compare with other array methods

        Unlike filtering or reversing, sorted(by:) changes order based on a custom rule.
      3. Final Answer:

        It sorts an array using a custom rule you provide. -> Option A
      4. Quick Check:

        sorted(by:) = custom sorting [OK]
      Hint: Remember: sorted(by:) arranges items your way [OK]
      Common Mistakes:
      • Confusing sorting with filtering
      • Thinking it removes duplicates
      • Assuming it reverses the array
      2. Which of the following is the correct syntax to sort an array of integers in descending order using sorted(by:)?
      easy
      A. let sortedArray = numbers.sorted(by: { $1 > $0 })
      B. let sortedArray = numbers.sorted(by: { $0 < $1 })
      C. let sortedArray = numbers.sorted()
      D. let sortedArray = numbers.sorted(by: { $0 > $1 })

      Solution

      1. Step 1: Understand sorting order

        To sort descending, the comparator must return true when the first element is greater than the second.
      2. Step 2: Check each option

        let sortedArray = numbers.sorted(by: { $0 > $1 }) uses { $0 > $1 } which sorts descending. let sortedArray = numbers.sorted(by: { $0 < $1 }) sorts ascending. let sortedArray = numbers.sorted() sorts ascending by default. let sortedArray = numbers.sorted(by: { $1 > $0 }) reverses the comparison incorrectly.
      3. Final Answer:

        let sortedArray = numbers.sorted(by: { $0 > $1 }) -> Option D
      4. Quick Check:

        Descending sort uses $0 > $1 [OK]
      Hint: Use $0 > $1 for descending sort [OK]
      Common Mistakes:
      • Using $0 < $1 for descending
      • Forgetting to provide closure for custom order
      • Confusing parameter order in closure
      3. What is the output of the following Swift code?
      let names = ["Anna", "Bob", "Charlie"]
      let sortedNames = names.sorted(by: { $0.count < $1.count })
      print(sortedNames)
      medium
      A. ["Bob", "Charlie", "Anna"]
      B. ["Bob", "Anna", "Charlie"]
      C. ["Charlie", "Anna", "Bob"]
      D. ["Anna", "Bob", "Charlie"]

      Solution

      1. Step 1: Understand the sorting rule

        The closure sorts by string length ascending: shorter names come first.
      2. Step 2: Apply sorting to the array

        "Bob" has 3 letters, "Anna" 4, "Charlie" 7. So order is ["Bob", "Anna", "Charlie"].
      3. Final Answer:

        ["Bob", "Anna", "Charlie"] -> Option B
      4. Quick Check:

        Sort by length ascending = ["Bob", "Anna", "Charlie"] [OK]
      Hint: Sort by $0.count < $1.count for shortest first [OK]
      Common Mistakes:
      • Sorting alphabetically instead of by length
      • Confusing < with > in closure
      • Expecting original order
      4. Identify the error in this Swift code that tries to sort an array of tuples by the second value:
      let items = [("a", 3), ("b", 1), ("c", 2)]
      let sortedItems = items.sorted(by: { $0.1 > $1.1 })
      print(sortedItems)
      medium
      A. There is no error; the code sorts descending by second value.
      B. The tuple elements cannot be accessed by index like $0.1.
      C. The closure parameters should be $1.1 > $0.1 for ascending order.
      D. The sorting closure must return an Int, not Bool.

      Solution

      1. Step 1: Check tuple access syntax

        Accessing tuple elements by $0.1 and $1.1 is correct in Swift closures.
      2. Step 2: Verify sorting closure logic

        The closure returns true if first element's second value is greater, sorting descending by second value.
      3. Final Answer:

        There is no error; the code sorts descending by second value. -> Option A
      4. Quick Check:

        Tuple access and Bool return are correct [OK]
      Hint: Tuple elements accessed as $0.1; closure returns Bool [OK]
      Common Mistakes:
      • Thinking tuple elements can't be accessed by index
      • Expecting closure to return Int
      • Confusing ascending and descending order
      5. You have an array of dictionaries representing people: let people = [["name": "Alice", "age": 30], ["name": "Bob", "age": 25], ["name": "Charlie", "age": 30]]. How do you sort this array first by age ascending, then by name ascending if ages are equal?
      hard
      A. people.sorted { $0["age"] as! Int < $1["age"] as! Int && $0["name"] as! String < $1["name"] as! String }
      B. people.sorted(by: { $0["age"] as! Int > $1["age"] as! Int || $0["name"] as! String > $1["name"] as! String })
      C. people.sorted { ($0["age"] as! Int, $0["name"] as! String) < ($1["age"] as! Int, $1["name"] as! String) }
      D. people.sorted(by: { $0["name"] as! String < $1["name"] as! String })

      Solution

      1. Step 1: Understand sorting by multiple keys

        Sorting by age ascending, then name ascending means comparing tuples of (age, name).
      2. Step 2: Check each option's logic

        people.sorted { ($0["age"] as! Int, $0["name"] as! String) < ($1["age"] as! Int, $1["name"] as! String) } compares tuples directly, which sorts by age first, then name if ages equal. people.sorted { $0["age"] as! Int < $1["age"] as! Int && $0["name"] as! String < $1["name"] as! String } uses && which fails for correct ordering. people.sorted(by: { $0["age"] as! Int > $1["age"] as! Int || $0["name"] as! String > $1["name"] as! String }) sorts descending and mixes conditions incorrectly. people.sorted(by: { $0["name"] as! String < $1["name"] as! String }) sorts only by name.
      3. Final Answer:

        people.sorted { ($0["age"] as! Int, $0["name"] as! String) < ($1["age"] as! Int, $1["name"] as! String) } -> Option C
      4. Quick Check:

        Tuple comparison sorts by multiple keys [OK]
      Hint: Compare tuples (age, name) for multi-level sorting [OK]
      Common Mistakes:
      • Using && instead of tuple comparison
      • Sorting only by one key
      • Mixing ascending and descending incorrectly
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard