2017-11-23 3 views
1

는이 건설 로직 또는 루비 행동의 알고리즘의 설명을 줄 수 : Enumerable에서을 반복 처리가 2 배열 출력을 줄 때 루비 분할 배열

arr = [1,2,3,4,5] 
arr.partition.with_index{|_,index| index>2} 

어떻게 논리를 공식화 할 수 있습니다. 우리는 단 하나의 partition을 그것의 clear - just method라는 동작으로 부를 때, 그러나 with_index으로 갈 때이 건축물은 나를 위해 "마법"이됩니다.

당신에게

UPD 감사합니다 조건은 아니다 partition의 블록에, 그것은 별도의 'Enumerable에서'개체 방법 블록에 있습니다. 이 방법은 with_index입니다. 이 두 번째 상호 작용 수준은 나를 위해 재미있다. with_index의 조건이 파티션 결과에 영향을주는 이유는 무엇입니까? 이것은 partition 설명서에서 명확하지 않은 동작입니다.

+1

여기 당신에게 어떤 마법이 있습니까? 두 개의 배열을 반환합니다. 블록의 요소를 포함하는 첫 번째 요소는 true로 평가되고 나머지 요소는 [api doc] (https://ruby-doc.org/core-2.4.2/Enumerable.html#method- i- 파티션)). –

+0

알렉스 골 루벤 코 (Alex Golubenko) 당신이 단 하나의 파티션에 대해 말해주었습니다. 파티션과 with_index 사이의 통신에 대해 질문합니다. –

답변

0

: 더 블록이 주어지지

경우, 열거 대신 반환

두 번째 배열의 뜻은 다른 모든 요소가 포함되어 있습니다.

> arr = [1,2,3,4,5] 
=> [1, 2, 3, 4, 5] 
> arr.partition 
=> #<Enumerator: ...> 

당신은 Enumerable에있는 많은 방법에 대한 설명에서 같은 일을 볼 수 있지만, 반환되는 열거에 대한 많은 세부 사항이 없습니다.

열거 자 체인의 핵심은 Enumerator에있는 each 메서드의 동작입니다. 예를 들어, 에 의해 반환 된 Enumeratorpartition처럼 동작하는 each 메서드를가집니다. 이렇게하면 단일 블록을 전달하고 partitionwith_index의 결합 된 동작을 얻을 수 있습니다. 당신은 몇 가지 단계에서이 작업을 수행 할 경우 도움이 될 수 있습니다

> enumerator = arr.partition 
=> #<Enumerator: ...> 
> enumerator.each { |n| n < 3 } # just to demonstrate `each` performing a partition 
=> [[1, 2], [3, 4, 5]] 
> enumerator.with_index { |_, index| index > 2 } 
=> [[4, 5], [1, 2, 3]] 

가 주어진 어떤 블록 partitionenum_for 예에 :partition 전달과 같은 점이다 생각하는 또 다른 방법

> another_enum = arr.enum_for(:partition) 
=> #<Enumerator: ...> 
> another_enum.with_index { |_, index| index > 2 } # same result as above 
=> [[4, 5], [1, 2, 3]] 
+1

Mikey,이 명확한 설명에 대해 감사드립니다. –

+0

위대한 @DmitryDmitriev - 기꺼이 도와 줬습니다. – mikej

0

인덱스> 2 루비 값

0

파티션의 나머지 새로운 배열을 만들 때

반환 개의 배열을 ENUM 첫 함유 원소 어느 블럭들을 평가 용 참으로, 두 번째는 나머지를 포함합니다. 블록을 지정하지 않으면 열거자가 대신 반환됩니다. 이 조건을 index > 2 satisfys 때문에

arr = [1,2,3,4,5] 
arr.partition.with_index{|_,index| index>2} 
=> [[4, 5], [1, 2, 3]] 

먼저 배열 [4,5] 것을 포함한다. 당신은 아마 partition의 루비의 문서를 읽기로 한 [1,2,3]

+0

조건이 파티션 블록에 없으면 별도의 메소드 블록에 있습니다. 이 메소드는 'with_index'입니다. 이 두 번째 상호 작용 수준은 나를 위해 흥미 롭습니다. "witth_index"의 조건이 파티션 결과에 영향을 미치는 이유는 무엇입니까? 이는 파티션 문서에서 명확하지 않은 동작입니다. –