grep
에 대해 이야기해 봅시다. 방법.
이 방법으로 무엇을 할 수 있나요?
Grep을 사용하여 배열 및 범위와 같은 열거 가능한 개체를 필터링할 수 있습니다.
"하지만 select는 이미 하고 있습니다!"
예, 하지만 grep은 다른 방식으로 작동하며 다른 결과를 생성합니다.
몇 가지 예를 살펴보겠습니다.
Ruby Grep 메소드 예
주어진 배열:
objects = ["a", "b", "c", 1, 2, 3, nil]
grep을 사용하여 문자열만 가져올 수 있습니다. :
objects.grep(String) # ["a", "b", "c"]
정수만:
objects.grep(Integer) # [1, 2, 3]
또는 nil이 아닌 모든 것 :
objects.grep_v(NilClass) # ["a", "b", "c", 1, 2, 3]
단어 배열이 있는 경우:
fruit = ["apple", "orange", "banana"]
"a"로 시작하는 모든 단어를 찾을 수 있습니다.
fruit.grep(/^a/) # ["apple"]
또는 ''로 끝나는 단어 :
fruit.grep(/e$/) # ["apple", "orange"]
번호 목록이 있는 경우:
numbers = [9, 10, 11, 20]
범위 내의 모든 숫자 목록을 얻을 수 있습니다. :
numbers.grep(5..10) # [9, 10]
블록을 사용할 때 지도 방식과 선택 방식을 하나로 결합할 수 있습니다.
numbers.grep(5..10) { |n| n * 2 } # [18, 20]
멋지게 하고 싶다면…
times_two = ->(x) { x * 2 } numbers.grep(5..10, ×_two) # [18, 20]
꽤 멋지죠?
Grep 대 선택:차이점 이해
grep은 어떻게 작동합니까?
트릭은 ===
입니다. Ruby의 메소드(삼중 등호).
Grep은 전달하는 모든 인수에 대해 이 메서드를 호출합니다.
그리고 클래스, 정규식 및 범위가 모두 ===
를 구현한다는 것이 밝혀졌습니다. .
클래스에 적합한 방식으로 이 메서드를 구현합니다.
예를 들어 :
- 클래스(예:
Integer
또는Array
), 주어진 객체 클래스와 비교합니다. - 범위는 숫자가 범위에 포함되어 있는지 확인합니다.
- 정규 표현식은 일치 항목이 있는지 확인합니다.
그래서 당신이 말할 때 :
objects.grep(Integer)
당신이 실제로 말하는 것은 :
objects.select { |obj| Integer === obj }
오랫동안 grep에 대해 혼란스러웠습니다...
내가 이것을 이해할 때까지.
select
메소드는 블록의 결과를 기반으로 목록을 필터링합니다.
블록이 true로 평가되면 해당 요소가 선택됩니다.
하지만 grep
===
를 사용하여 두 가지를 비교합니다. .
grep은 select의 보다 전문화된 버전이라고 말할 수 있습니다. !
루비 그렙 마인드맵
동영상 튜토리얼 보기
요약
Ruby의 grep 메소드에 대해 배웠습니다! 작동 방식을 이해하면 매우 유용한 방법입니다.
이것이 스며들도록 연습하십시오.
연습이 숙달의 열쇠입니다!