Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby Grep 방법을 사용하는 방법(예제 포함)

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, &times_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 방법을 사용하는 방법(예제 포함)

동영상 튜토리얼 보기

요약

Ruby의 grep 메소드에 대해 배웠습니다! 작동 방식을 이해하면 매우 유용한 방법입니다.

이것이 스며들도록 연습하십시오.

연습이 숙달의 열쇠입니다!