Menu
Coddy logo textTech

sort_by, min_by, max_by

Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 26번째.

여러분은 이미 sort, min, 그리고 max를 알고 있습니다. _by 버전은 무엇을 비교할지에 대한 제어권을 제공하여, 구조화된 데이터를 정렬하는 데 완벽합니다.

sort_by는 블록을 받습니다. 블록은 각 요소에 대해 비교할 값을 반환합니다:

words = ["banana", "hi", "hello"]
by_length = words.sort_by { |w| w.length }
puts by_length.inspect   # ["hi", "hello", "banana"]

내림차순의 경우, 숫자에 대해 비교 키를 부정(-w.length)하거나 결과에 reverse를 호출하세요.

min_bymax_by는 블록에서 가장 작거나 큰 값을 가진 단일 요소를 반환합니다:

people = [
  { name: "Ada",   age: 36 },
  { name: "Bob",   age: 22 },
  { name: "Cara",  age: 41 }
]

youngest = people.min_by { |p| p[:age] }
oldest   = people.max_by { |p| p[:age] }
puts youngest[:name]   # Bob
puts oldest[:name]     # Cara

단축 표기법도 작동합니다: words.sort_by(&:length).

challenge icon

챌린지

중급

products 배열이 주어지며, 각 요소는 :name, :price, 그리고 :quantity를 키로 가지는 해시입니다. 각 상품의 재고 가치(stock value)price * quantity입니다.

다음 세 줄을 출력하세요:

  1. 재고 가치를 기준으로 내림차순 정렬된 이름들을 , 로 연결하여 출력 (계산된 값에 sort_by 사용)
  2. 가격이 5 미만인 항목 중 수량이 가장 많은 상품의 이름 (필터링된 리스트에 max_by 사용)
  3. 수량이 최소 10개 이상인 상품 중 가장 저렴한 상품의 이름 (필터링된 리스트에 min_by 사용)

기본 배열에 대한 출력 결과는 다음과 같습니다:

cheese, milk, bread, apple
bread
bread

직접 해보기

products = [
  { name: "milk",   price: 3, quantity:  8 },
  { name: "apple",  price: 1, quantity:  4 },
  { name: "cheese", price: 5, quantity:  6 },
  { name: "bread",  price: 2, quantity: 12 }
]

# TODO: 재고 가치 기준 내림차순 정렬; 수량 기준 최대값 (가격 < 5); 가격 기준 최소값 (수량 >= 10)
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨