2014-02-22 2 views
3

첫 번째 요소와 마지막 요소를 영리하게 한 줄에 어떻게 삭제할 수 있습니까?첫 번째 및 마지막 배열 요소를 한 줄로 삭제 하시겠습니까?

names = %w[Go Go Go Power Rangers Go] 
names.shift.pop 

내가 생각하기 때문 실패, 모두 shift 및 오류를 제기 한 후 다음 함수에 전달 제거 값을 반환 pop :

은 내가 시도했습니다.

또한이 작업을 delete_at과 함께 시도했지만 배열 매개 변수가 허용되지 않으므로이를 한 줄짜리로 만들려고 노력하지 않습니다.

아이디어가 있으십니까?

참고 : 나는 당신이 names = names[1..-2] 사용할 수 있습니다 미니멀리즘

+3

정직하게 말하면,'names.shift; names.pop'. 명확성 이상의 미니멀리즘을 그만 두십시오. – meagar

+0

'필터링'할 수 있지만 실제로, 왜? –

+0

일부 언어에서는 코드를 가장 컴팩트 한 형식으로 압축 할 수있는 능력이 있다고 생각되지만 읽기 쉽도록 유지 한 다음 유지 보수 가능성을 희생합니다. –

답변

3

가치,하지만 당신은 안된다. names.pop; names.shift을 사용하고 끝내십시오.

+3

왜 안 되니? 그게 무슨 문제입니까? – xlembouras

+1

'names.pop보다 훨씬 덜 명확합니다. names.shift', 이익이 없습니다. 더 빠르지도 짧지도 않습니다. 단지 하나의 진술 일뿐입니다. 본질적으로 가치가있는 것은 아닙니다. – meagar

+0

이것은 내가 찾던 해결책의 종류입니다. 감사! – krystah

0

어때요? 다른 사람이 말했듯이

names.slice!(1..-2) 

정말하지만, 아무 문제가 없습니다 :

names.pop 
names.shift 
5
_, *names, _ = %w[Go Go Go Power Rangers Go] 
names #=> ["Go", "Go", "Power", "Rangers"] 

또는 당신은 이미 다음 names으로 전체 배열이있는 경우 :

names = %w[Go Go Go Power Rangers Go] 
_, *names, _ = names 
names #=> ["Go", "Go", "Power", "Rangers"] 
+1

Oooo, 매우 창의적입니다. ; P – Ajedi32

+0

아주 좋은 것 :) –

0

을 이 솔루션을 정말 좋아합니다 :

_, *names, _ = names 

아주 멋지죠?

또한, 나는 다른 변수 (funcional 스타일)

_, *new_names, _ = names 

편집을 사용합니다 : 미안 @sawa 이미이 솔루션을 게시 깨달았다.

관련 문제