Ruby의 select 메소드를 사용하여 객체 배열을 필터링할 수 있습니다.
예를 들어 모두 찾을 수 있음 목록의 짝수.
select
없이 다음과 같습니다.
even_numbers = [] [1,2,3,4,5,6].each do |n| if n.even? even_numbers << n end end even_numbers
아주 간단한 것에 대한 꽤 많은 양의 코드입니다!
select
사용법을 알아봅시다. .
방법 선택 예
선택을 사용하려면 블록이 필요합니다.
블록 내에서 true
로 평가되는 것을 반환해야 합니다. 또는 false
, 및 select
이를 사용하여 배열을 필터링합니다.
이 기사를 읽으면 Ruby의 부울 값에 대해 배울 수 있습니다.
예시 :
[1,2,3,4,5,6].select { |n| n.even? }
이것은 소개의 첫 번째 예제와 동일한 작업을 수행하지만 훨씬 적은 코드를 사용합니다.
사실, 우리는 이것을 훨씬 더 줄일 수 있습니다.
좋아요 :
[1,2,3,4,5,6].select(&:even?)
이러한 종류의 바로 가기는 배열의 모든 요소에서 직접 메서드를 호출해야 하는 경우에만 작동합니다.
Btw, select
를 사용할 수도 있습니다. 해시와 함께.
예 :
stock = { apples: 10, oranges: 5, bananas: 1 } stock.select { |k, v| v > 1 } # {:apples=>10, :oranges=>5}
k
위치 키 및 v
를 나타냅니다. 가치를 나타냅니다.
내 말은 :
"1보다 큰 주식을 가진 모든 과일을 찾아주세요."
다른 방법과 선택 결합
select 메소드를 다른 Enumerable 메소드와 결합할 수 있습니다.
특히 with_index
.
예 :
fruits = %w(apple orange banana) fruits.select.with_index { |word, idx| idx.even? } # ["apple", "banana"]
이렇게 하면 개체(이 경우 문자열) 자체 대신 인덱스를 사용하여 필터링할 수 있습니다.
인플레이스 어레이 필터링
select
사용 배열에서 항상 새 배열을 만듭니다.
대신 원래 배열을 변경하려면 select!
를 사용할 수 있습니다. 방법.
방법은 다음과 같습니다. :
fruits = %w(apple orange banana) fruits.select! { |fruit| fruit.start_with? "a" } # ["apple"]
느낌표로 끝나는 메소드(예:select!
)는 새 개체를 반환하는 대신 개체를 변경하지만 이 규칙은 언어 자체에 의해 적용되지 않습니다.
우리 사이의 협약일 뿐입니다.
찾기 대 선택
선택은 목록을 필터링하고 결과가 포함된 배열을 얻고 싶을 때 유용합니다.
하지만 하나의 개체만 찾으려면 어떻게 해야 합니까?
find
를 사용할 수 있습니다. 방법.
좋아요 :
letters = %w(a aa aaa aaaa) letters.find { |l| l.size == 3 } # "aaa" letters.find { |l| l.size == 10 } # nil
찾기는 첫 번째 일치 또는 nil
을 제공합니다. 찾을 수 없는 경우.
모두 찾기 방법 이해
find_all
이 궁금하시다면 메서드 및 find
와 관련되는 방식 &select
...
매우 간단합니다!
find_all
메소드는select
의 별칭입니다. .find
메서드를 사용하면 많은 개체가 아닌 하나의 특정 개체를 찾을 수 있습니다.
Ruby 2.6은 select
에 대한 또 다른 별칭을 추가합니다. :
filter
선택의 반대말은 무엇입니까?
원하는 요소를 선택하는 대신 원하지 않는 요소를 제거할 수 있습니다.
선택이 간편함 :
[1,2,3,4,5,6].select { |n| n != 4 }
하지만 좀 더 명확하게 하는 방법이 있습니다.
그 방법은 reject
입니다. .
예 :
[1,2,3,4,5,6].reject { |n| n == 4 }
성능이나 기타 면에서 기술적인 이점을 얻지는 못하지만 코드를 개선할 것입니다.
레일 선택 방법
Rails 모델로 작업하고 select
를 사용할 수도 있다는 것을 배울 때 혼란스러워 하지 않기를 바랍니다. 거기.
알고 계셔야 합니다...
이 select
방법이 다릅니다!
예 :
Fruit.select(:id, :name, :color)
select
를 사용할 때 ActiveRecord
사용 데이터베이스에서 특정 열을 요청하는 모델입니다.
내가 아는 한 이것은 대부분 성능상의 이유로 수행됩니다.
이에 대한 마지막 참고 사항 :
Rails 앱 내에서 일반 배열로 작업하는 경우 select
이 기사 전체에서 이야기한 방법입니다.
요약
배열, 범위 및 해시와 같은 객체 컬렉션을 작업하는 데 Ruby에서 가장 유용한 방법 중 하나인 select에 대해 배웠습니다.
이제 편집기를 열고 사용할 차례입니다.
읽어주셔서 감사합니다!