열거 가능이란 무엇입니까?
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
방법.
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
는 마스터할 가치가 있는 모듈이므로 문서로 이동하여 무엇을 할 수 있는지 확인하십시오!
이 기사가 마음에 들면 아래 양식에서 내 뉴스레터를 공유하고 구독하는 것을 잊지 마십시오. 그것은 나에게 많은 도움이 될 것입니다! 🙂