2016-12-08 9 views
1

대로 작동하지 않는 이유는 내가 쓴 블록 : 그냥 나던 일이 같은내 루비 #each 블록은 한 줄

half.each { |x| array << x count+=1 } 

하지만 내가 "어떻게 그것을 작성하는 경우는 아주 좋은 작동합니다. ..end "방법 :

half.each do |x| 
    array << x 
    count+=1 
    end 

내가 먼 길에 내 모든 방법을 사용할 수 있습니다하지만 난 루비의 한 줄의 방법을 이해하기 원하기 때문에 정말 중요하지.

def length_even(array) 
    half = array[(0...array.length/2)] 
    count = 0 
    half.each do |x| 
    array << x 
    count+=1 
    end 
    p array.drop(count).join 
end 
+1

'half' 무엇입니까? –

+0

절반은 변수입니다. 나는 그것을 "절반"이라고 말하고자했다. –

+0

"일하지 않는다"는 것은 무엇을 의미합니까? 무슨 일이야 ? –

답변

1

솔루션

당신의 방법의 목표는 무엇입니까 사용할 수 있습니까? 배열을 2로 분할하고 양쪽 절반을 전환 하시겠습니까? 당신이 당신의 방법의 끝에 p를 사용하는 경우)

참고

  • , 그것은 항상 표시됩니다; 지금 당신은 당신의 한 줄을

    def length_even(array) 
        array.rotate(array.length/2).join 
    end 
    
    puts length_even([0,1,2,3,4,5]) #=> "345012" 
    

    가 : Array#rotate은 정확히 수행 그것을 반환하기 전에. 항상 바람직한 것은 아닙니다. 귀하의 메서드가 nil을 반환 할 것이기 때문에 여전히 puts보다 좋습니다.

  • 코드는 array을 수정합니다. 원하지 않을 수도 있습니다. 이 중 앞의 코드를 필요가 없습니다 당신이 count = half.each{|x| array << x}.size

  • count 그냥 1+array.length/2입니다 사용할 수 있도록

  • each는, 원래의 배열을 반환합니다.

  • 당신은 문서에서 찾을 마지막으로, rotate가 어려울 수 있습니다 [1,2,3]

  • [12,3]의 차이를 볼 수, 공간과 조인을 사용 할 수 있습니다

    . 하지만 이미 drop에 대해 알고 있고 droptake이라고 언급되어 있습니다.

그래서 당신의 코드가 될 수 :

def length_even(array) 
    half_size = array.length/2 
    (array.drop(half_size)+array.take(half_size)).join(' ') 
end 
1

half.each { |x| array << x count+=1 }

가 귀하의 문은 여기에 분리되지 않은 : 필요한 경우 감사 벌써 많은이 전체 방법이다. 일반적으로 줄 바꿈은 구분자 역할을합니다. 같은 줄에 여러 개의 문을 넣고 싶은 경우, ;

half.each { |x| array << x; count+=1 } 
+0

@ ReşitKörsu 다음 줄에 코드를 작성해도 그렇지 않습니다. 또한'with_index'를 사용할 수도 있습니다. 카운터를 직접 정의하지 않아도됩니다. –

+0

@ ReşitKörsu : 유용한 답변을 수락하는 것을 잊지 마십시오 :) –