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

Ruby Enumerable Module에 대한 기본 가이드(+ 내가 가장 좋아하는 방법)

열거 가능이란 무엇입니까?

Enumerable은 반복 메서드 모음입니다. , Ruby 모듈, Ruby를 훌륭한 프로그래밍 언어로 만드는 데 큰 부분을 차지합니다.

Enumerable에는 다음과 같은 유용한 방법이 포함됩니다. :

  • map
  • select
  • inject

열거 가능한 메서드는 블록을 제공하여 작동합니다.

그 블록에서 모든 요소로 무엇을 하고 싶은지 알려줍니다.

예를 들어 :

[1,2,3].map { |n| n * 2 }

모든 숫자가 두 배로 된 새로운 배열을 제공합니다.

정확한 결과는 map을 사용하는 방법에 따라 다릅니다. 모든 값을 변환하는 데 도움이 됩니다. select 목록을 필터링하고 inject할 수 있습니다. 배열 내부의 모든 값을 더하는 데 사용할 수 있습니다.

20개가 넘는 Ruby Enumerable 메소드가 있습니다.

자세히 알아보도록 하겠습니다.

Each_Cons 메소드

내가 가장 좋아하는 Enumerable 메소드는 each_cons입니다. !

이유는 :

이 방법은 정말 유용합니다. all?과 결합할 때 n-gram을 찾거나 일련의 숫자가 연속적인지 확인하는 데 사용할 수 있습니다. , 다른 Enumerable 방법.

Ruby Enumerable Module에 대한 기본 가이드(+ 내가 가장 좋아하는 방법)

each_cons n 크기의 하위 배열을 제공합니다. , 따라서 [1,2,3]가 있는 경우 , each_cons(2) [[1,2], [2,3]]을(를) 제공합니다. .

예시를 보자 :

numbers = [3,5,4,2]

numbers.sort.each_cons(2).all? { |x,y| x == y - 1 }

이 코드는 숫자를 정렬한 다음 each_cons(2)를 호출하여 시작합니다. , Enumerator를 반환합니다. 개체를 호출한 다음 all? 모든 요소가 조건과 일치하는지 확인하는 메서드입니다.

다음은 each_cons를 사용하는 또 다른 예입니다. xyx와 같이 문자가 같은 문자로 둘러싸여 있는지 확인하려면 .

str = 'abcxyx'

str.chars.each_cons(3).any? { |a,b,c| a == c }

더 있습니다!

true를 얻는 대신 이 패턴이 몇 번 발생하는지 알고 싶다면 / false 결과적으로 any?를 변경할 수 있습니다. count .

내가 더 매력적이라고 ​​생각하는 것은 each_cons에 대한 구현입니다. 방법.

array = []

each do |element|
  array << element
  array.shift     if array.size > n
  yield array.dup if array.size == n
end
<블록 인용>

참고 :이것은 Enumerable의 Rubinius 구현에서 가져온 것입니다. . 원본 소스 코드는 여기에서 찾을 수 있습니다.

구현은 빈 Ruby 배열로 시작한 다음 each를 사용하여 요소를 반복합니다. .

여기까지는 모든 것이 표준입니다. 하지만 배열에 요소를 추가하고 크기가 원하는 것보다 크면 배열을 자릅니다(Array#shift 사용).

크기는 each_cons에 대한 인수입니다. .

그런 다음 dup 배열에 요청된 크기가 있는 경우 배열의 크기입니다.

배열 인덱스를 어지럽히는 대신 열거 가능한 객체에 일종의 '슬라이딩 창' 효과를 유지하기 때문에 이것이 천재적이라고 생각합니다.

더 흥미로운 방법

메서드 설명
카운트 이름이 말하는 대로 블록 내에서 true로 평가되는 항목을 계산합니다.
그룹별 블록 반환 값으로 열거 가능한 요소를 그룹화합니다. 해시를 반환합니다.
파티션 두 그룹으로 분할합니다. 2차원 배열을 반환합니다.
있나요? true 반환 블록이 true를 반환하는 경우 모든 요소에 대해
모두? true 반환 블록이 true를 반환하는 경우 그것에 양보된 모든 요소에 대해
없음? all?의 반대
주기(n) 모든 요소를 ​​n번 반복하므로 [1,2].cycle(2) [1,2,1,2]
찾기 예:select 하지만 가장 먼저 찾은 것을 반환합니다.
주사 이전 블록 값의 결과를 누적하고 다음 블록 값으로 전달합니다. 합계를 합산하는 데 유용합니다.
zip 열거 가능한 두 객체를 함께 연결하여 병렬로 작업할 수 있습니다. 요소 비교 및 ​​해시 생성에 유용합니다.
지도 열거 가능한 개체의 모든 요소를 ​​변환하고 새 버전을 배열로 반환합니다.

마무리

본 것처럼 Enumerable 는 마스터할 가치가 있는 모듈이므로 문서로 이동하여 무엇을 할 수 있는지 확인하십시오!

이 기사가 마음에 들면 아래 양식에서 내 뉴스레터를 공유하고 구독하는 것을 잊지 마십시오. 그것은 나에게 많은 도움이 될 것입니다! 🙂