정렬 된 배열이 있고 요소의 마지막 50-60-70 % (일반적으로 n %) 만 유지하려고합니다. 이것을 어떻게 할 수 있습니까? Ruby에서 배열의 마지막 n % 요소를 선택하는 방법은 무엇입니까?
[1,2,3,4,5,6,7,8,9].last(this.size*0.7)
예를
를 들어이 작동하지 않습니다.
정렬 된 배열이 있고 요소의 마지막 50-60-70 % (일반적으로 n %) 만 유지하려고합니다. 이것을 어떻게 할 수 있습니까? Ruby에서 배열의 마지막 n % 요소를 선택하는 방법은 무엇입니까?
[1,2,3,4,5,6,7,8,9].last(this.size*0.7)
예를
를 들어이 작동하지 않습니다.
루비에 대해 잘 모르겠지만 Google과 추측 할 수 있습니다.
a = [1,2,3,4,5,6,7,8,9]
a[a.size * 0.6..-1] ==> [6, 7, 8, 9]
a.last(a.size * 0.4) ==> [7, 8, 9]
그 이유는 먼저 당신이 그것을 참조하기 전에 배열에 이름을 지정해야한다는 것입니다. 이 경우 a
입니다.
관련 문서에서 이와 같은 기능을 찾을 수 있습니다 : Array.
Thx이지만 새로운 변수를 사용하지 않으려 고합니다. – Konstantin
@Konstantin : 알았습니다. 이 질문에 다음 번에. ^^ – tilpner
당신이 도청하기 때문에 당신은 정말 당신이
[1,2,3,4,5,6,7,8,9].tap do |a|
#a is the original array passed into a block
a.delete_if.with_index{|index,element| element if index + 1 < a.size * 0.7}
end
#=> [4,5,6,7,8,9]
같은 블록 안에 메소드 체인을 변경할 수 있습니다 당신은 당신이 #tap
을 사용할 수 요청하는 기능이 원래의 배열을 파괴주의하십시오 어쨌든 변수에 원래의 배열을 저장하지 않기 때문에 걱정하지 않아도됩니다.
왜 배열을 변수에 저장하고 싶지 않은지 잘 모르겠지만 프로 시저를 훨씬 쉽게 만들 수 있습니다. 같은 간단한 방법 당신은 당신이 원하는 것처럼 객체를 참조하기 위해 tap
를 사용하기 위해 필요한이
def last_n_percent(array,percent=0.5)
array.last(array.size * percent)
end
충분할 것입니다. 탭은 일반적으로 블록의 리턴 값을 무시되므로
[1,2,3,4,5,6,7,8,9].tap { |this| break this.last(this.size*0.7) }
break
필요하다.
"작동하지 않음"이란 무엇을 의미합니까? 좀 더 일반적인 것으로 약간 수정하면,'a = [1,2,3,4,5,6,7,8,9]; a.last (a.size * 0.7)'는 배열 4 ~ 9를 원소로 반환합니다. 그게 네가 원하는게 아니야? – sameers
클래스'Array'에 대한 새로운 메소드를 정의 할 수도 있습니다 : class Array; def last_percent (p); self.last (self.size * 0.01 * p); 종료; 끝 '. '[1,2,3,4,5,6,7,8,9]. last_percent (35) => [7, 8, 9]'. 내장 Ruby 클래스에 메서드를 추가하는 것을 "원숭이 패치"라고 부릅니다. 일부는 연습을 포용하고 다른 일부는 혐오합니다 .. –