Select와 Reject
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 21번째.
select 메서드는 블록이 참(truthy)인 값을 반환하는 요소들만 포함하는 새 배열을 반환합니다. 이것은 Ruby에서 "filter"를 표현하는 방식입니다.
numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
puts evens.inspect # [2, 4, 6]reject는 그 반대입니다. 블록이 false를 반환하는 모든 항목을 유지합니다:
odds = numbers.reject { |n| n.even? }
puts odds.inspect # [1, 3, 5]둘 다 새로운 배열을 반환하며, 원본은 변경되지 않습니다.
블록은 단지 서술어(predicate)일 뿐이며, true 또는 false로 평가되는 모든 것이 작동합니다:
words = ["hi", "hello", "hey", "yo"]
long = words.select { |w| w.length >= 3 }
puts long.inspect # ["hello", "hey"]챌린지
초급쉼표로 구분된 정수 목록을 읽습니다. 다음 두 줄을 출력하세요:
10보다 큰 숫자들 (select사용),,로 연결하여 출력3으로 나누어떨어지지 않는 숫자들 (reject사용),,로 연결하여 출력
입력이 3,7,12,15,20인 경우, 출력은 다음과 같습니다:
12, 15, 20
7, 20치트 시트
select는 블록이 참(truthy)인 요소들로 구성된 새 배열을 반환합니다 ("filter"와 유사함):
evens = [1,2,3,4].select { |n| n.even? } # [2, 4]reject는 그 반대로, 블록이 거짓(falsy)인 요소들을 유지합니다:
odds = [1,2,3,4].reject { |n| n.even? } # [1, 3]두 메서드 모두 새 배열을 반환하며, 원본 배열은 변경되지 않습니다.
직접 해보기
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: 1행, 10보다 큰 숫자들, ", "로 연결됨
# TODO: 2행, 3으로 나누어 떨어지지 않는 숫자들, ", "로 연결됨
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 및 흐름의 모든 레슨
5Enumerable의 강력한 기능
Select와 RejectMap 체이닝Reduce / Injectcount, all?, any?, none?group_by와 partitionsort_by, min_by, max_by요약 - 데이터 파이프라인