Bird
Raised Fist0
Rubyprogramming~5 mins

Sort_by for custom sorting in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the sort_by method do in Ruby?
It sorts elements of a collection based on the value returned by the block you provide. It creates a new sorted array without changing the original.
Click to reveal answer
beginner
How do you use sort_by to sort an array of strings by their length?
You pass a block that returns the length of each string:
array.sort_by { |str| str.length }
Click to reveal answer
intermediate
Why might you choose sort_by over sort for custom sorting?
sort_by is often faster and simpler when sorting by a computed value because it calculates the sort keys once, then sorts by those keys.
Click to reveal answer
beginner
What will this code output?
words = ["apple", "pear", "banana"]
sorted = words.sort_by { |w| w[-1] }
puts sorted
It sorts words by their last letter:
["banana", "apple", "pear"] because 'a' < 'e' < 'r'.
Click to reveal answer
intermediate
Can sort_by be used to sort by multiple criteria? How?
Yes. Return an array of values in the block, like:
array.sort_by { |x| [x.age, x.name] } to sort by age, then name.
Click to reveal answer
What does sort_by return in Ruby?
AA new sorted array
BThe original array sorted in place
CA boolean indicating if sorting succeeded
DThe number of elements sorted
Which block would sort an array of numbers by their absolute value?
Aarray.sort_by { |n| n.abs }
Barray.sort_by { |n| -n }
Carray.sort_by { |n| n }
Darray.sort_by { |n| n.to_s }
What is a benefit of using sort_by instead of sort with a block?
AIt modifies the original array
BIt is slower but more readable
CIt calculates sort keys once for efficiency
DIt only works with numbers
How would you sort an array of hashes by the value of the key :score?
Aarray.sort_by { |h| h.score }
Barray.sort_by(:score)
Carray.sort { |a, b| a[:score] <=> b[:score] }
Darray.sort_by { |h| h[:score] }
What will ["cat", "dog", "bird"].sort_by { |w| w.length } return?
A["cat", "bird", "dog"]
B["cat", "dog", "bird"]
C["dog", "cat", "bird"]
D["bird", "cat", "dog"]
Explain how sort_by works in Ruby and give an example of sorting strings by their last character.
Think about how you tell Ruby what to sort by using a block.
You got /4 concepts.
    Describe how to sort an array of objects by multiple attributes using sort_by.
    Use an array inside the block to specify multiple sort keys.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the Ruby method sort_by do?
      easy
      A. Sorts elements based on a value you specify for each element.
      B. Changes the original array to a sorted one.
      C. Removes duplicate elements from an array.
      D. Reverses the order of elements in an array.

      Solution

      1. Step 1: Understand the purpose of sort_by

        sort_by sorts elements by a value you choose for each element, like length or age.
      2. Step 2: Compare with other array methods

        Unlike sort!, sort_by returns a new sorted array without changing the original.
      3. Final Answer:

        Sorts elements based on a value you specify for each element. -> Option A
      4. Quick Check:

        sort_by sorts by chosen value [OK]
      Hint: Remember: sort_by sorts by a custom value, not in-place [OK]
      Common Mistakes:
      • Thinking sort_by changes the original array
      • Confusing sort_by with reverse or uniq
      • Assuming sort_by removes duplicates
      2. Which of the following is the correct syntax to sort an array words by their length using sort_by?
      easy
      A. words.sort_by(word.length)
      B. words.sort_by => word.length
      C. words.sort_by { |word| word.length }
      D. words.sort_by(word) { length }

      Solution

      1. Step 1: Recall Ruby block syntax for sort_by

        The correct syntax uses a block with curly braces and a block variable: array.sort_by { |item| expression }.
      2. Step 2: Match syntax with the options

        words.sort_by { |word| word.length } correctly uses words.sort_by { |word| word.length }. Others have syntax errors or wrong usage.
      3. Final Answer:

        words.sort_by { |word| word.length } -> Option C
      4. Quick Check:

        sort_by needs a block with |variable| [OK]
      Hint: Use curly braces and |var| for sort_by blocks [OK]
      Common Mistakes:
      • Passing arguments directly instead of using a block
      • Using => instead of block braces
      • Misplacing parentheses around block
      3. What will be the output of this Ruby code?
      people = [{name: "Anna", age: 30}, {name: "Bob", age: 25}, {name: "Cara", age: 35}]
      sorted = people.sort_by { |person| person[:age] }
      puts sorted.map { |p| p[:name] }
      medium
      A. ["Anna", "Bob", "Cara"]
      B. ["Bob", "Anna", "Cara"]
      C. ["Cara", "Anna", "Bob"]
      D. ["Bob", "Cara", "Anna"]

      Solution

      1. Step 1: Understand sorting by age

        The array is sorted by the :age key in ascending order: 25, 30, 35.
      2. Step 2: Map sorted array to names

        After sorting, the order is Bob (25), Anna (30), Cara (35). Mapping names gives ["Bob", "Anna", "Cara"].
      3. Final Answer:

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

        sort_by age ascending = [Bob, Anna, Cara] [OK]
      Hint: Sort_by returns new array sorted by block value [OK]
      Common Mistakes:
      • Assuming sort_by sorts descending by default
      • Confusing keys in hash access
      • Not mapping to names after sorting
      4. Identify the error in this code snippet:
      items = ["apple", "pear", "banana"]
      sorted = items.sort_by do |item|
        item.length
      end
      puts sorted
      medium
      A. No error; code works correctly
      B. Incorrect block syntax for sort_by
      C. Missing parentheses in sort_by call
      D. Using sort_by instead of sort

      Solution

      1. Step 1: Check block syntax

        The block uses do |item| ... end, which is valid for sort_by.
      2. Step 2: Verify sort_by usage

        sort_by accepts a block and returns a new array sorted by item length. No syntax or logic errors.
      3. Final Answer:

        No error; code works correctly -> Option A
      4. Quick Check:

        sort_by with do-end block is valid [OK]
      Hint: do-end blocks work fine with sort_by [OK]
      Common Mistakes:
      • Thinking parentheses are mandatory around block
      • Confusing sort_by with sort!
      • Assuming sort_by modifies original array
      5. Given an array of hashes representing products:
      products = [
        {name: "Pen", price: 1.5, stock: 10},
        {name: "Notebook", price: 2.0, stock: 0},
        {name: "Eraser", price: 0.5, stock: 5}
      ]
      How would you use sort_by to get products sorted by price but only include those with stock greater than zero?
      hard
      A. products.sort_by { |p| p[:stock] }.select { |p| p[:price] > 0 }
      B. products.sort_by { |p| p[:price] if p[:stock] > 0 }
      C. products.sort_by { |p| p[:stock] > 0 ? p[:price] : 0 }
      D. products.select { |p| p[:stock] > 0 }.sort_by { |p| p[:price] }

      Solution

      1. Step 1: Filter products with stock > 0

        Use select to keep only products where stock is greater than zero.
      2. Step 2: Sort filtered products by price

        Apply sort_by on the filtered array to sort by price.
      3. Final Answer:

        products.select { |p| p[:stock] > 0 }.sort_by { |p| p[:price] } -> Option D
      4. Quick Check:

        Filter then sort_by for correct result [OK]
      Hint: Filter first, then sort_by for combined conditions [OK]
      Common Mistakes:
      • Trying to filter inside sort_by block
      • Sorting by stock instead of price
      • Selecting after sorting, which keeps unwanted items
      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