Ruby : 배열에서 첫 번째 요소를 제거하는 가장 쉬운 방법은 무엇입니까?


257

배열이 있다고 가정 해 봅시다.

[0, 132, 432, 342, 234]

첫 번째 요소를 제거하는 가장 쉬운 방법은 무엇입니까? (0)


1
'shift'는 팝이고 'unshift'는 푸시입니다. 팝이 발생하는 매개 변수의 수를 이동하는 교대
Arun

답변:


287

배열의 첫 번째 요소를 "팝"하는 것은 " shift "라고합니다 ( "unshift"는 배열 앞에 하나의 요소를 추가하는 작업입니다).


11
이것은 배열을 변경하고 nil빈 배열을 반환합니다 . drop다른 답변에서 언급 한 대안을 참조하십시오 .
Jay

368
a = [0,1,2,3]

a.drop(1)
# => [1, 2, 3] 

a
# => [0,1,2,3]

그리고 추가적으로 :

[0,1,2,3].drop(2)
=> [2, 3]

[0,1,2,3].drop(3)
=> [3] 

15
(a)가 정돈 된 배열로 평가 한 후 가장 좋은 대답은 빈 배열에서 예상대로 작동합니다.[].drop(1) => []
fearless_fool

4
OP가 "첫 번째 요소를 제거하는 가장 쉬운 방법"이라고 말했기 때문에 가장 좋은 대답
notaceo

4
이 답변은 첫 번째 답변과 제외 된 답변이 이미 100 개 이상의 투표를 했더라도 아래로 스크롤하는 것이 좋습니다. 감사합니다.
maddin2code 16:26에

7
+1은 수정 된 배열을 반환하기 때문에 +1 shift배열을 변경하고 이동 된 요소를 반환합니다 (또는 nil배열이 비어있는 경우)
yuval

305

shift배열 에서 메소드 사용

>> x = [4,5,6]
=> [4, 5, 6]                                                            
>> x.shift 
=> 4
>> x                                                                    
=> [5, 6] 

n 개의 시작 요소를 제거하려면 사용할 수 있습니다 x.shift(n)


3
내용은 동일하므로 설명이 정답에 병합되어야합니다.
Yolgie

129
[0, 132, 432, 342, 234][1..-1]
=> [132, 432, 342, 234]

달리 shift또는 slice이것은 수정 된 배열을 반환합니다 (한 라이너에 유용합니다).


12
주의해야 할 점은 배열이 비어 있으면 nil : [][1..-1] => nil및 not이 반환 []됩니다.
Mohamad

2
아닌가요 [1,2,3].shift한 라이너는?
thekingoftruth

4
@thekingoftruth : 예, 그러나 배열의 나머지 부분이 아닌 버린 요소로 평가되므로 다른 줄이 필요합니다.
fearless_fool

4
이 답변 은 어디에서나 사용할 수 있는 한 줄 표현 이기 때문에 좋아합니다 . [] 대 nil 문제를 피하기 위해 할 수 있습니다 arry[1..-1] || []. 그러나 arry.drop (1)이 더 좋습니다.
fearless_fool

나는이 cuz와 함께 가고 있습니다. 간단합니다. "어레이에서 빼낸 것 빼기"를 어떻게 얻을 수 있습니까? 다음 단계부터 질문은 초보자에게는 분명하지 않습니다!
Louis Maddox

99

이것은 매우 깔끔합니다.

head, *tail = [1, 2, 3, 4, 5]
#==> head = 1, tail = [2, 3, 4, 5]

주석에 쓰여 있듯이 원본 목록을 변경하지 않는 이점이 있습니다.


2
매우 영리하고 완벽하게 작동합니다. 이렇게하면 변수 "head"와 "tail"을 모두 사용할 수 있습니다.
nfriend21

3
이것은 나에게 많은 lisp를 생각 나게한다. (let ((head (car mylist)) (tail (cdr mylist)) ...)
thekingoftruth

트윗 담아 가기 나는 그것을 시도하는 것을 의미했습니다. Darcs가 Haskell로 작성되었음을 알면 내 관심을 끌 수 있습니다.
thekingoftruth

6
이 버전은 또한 원래 목록을 변경하지 않는 이점이 있습니다
Paweł Obrok

2
추가 단계없이 정보를 추출 할 때 유용 header, *properties = CSV.read(file_path,encoding: 'ISO-8859-1')
juliangonzalez




4

첫 번째 요소를 삭제하는 Array.delete_at (0) 메소드를 사용할 수 있습니다.

 x = [2,3,4,11,0]
 x.delete_at(0) unless x.empty? # [3,4,11,0]

나는 필요하지 않다고 생각 unless x.empty?합니다. nil인덱스가 범위를 벗어나면 단순히 반환 됩니다.
tknomad

2

당신이 사용할 수있는:

 a.delete(a[0])   
 a.delete_at 0

둘 다 일할 수있다


1

: 당신은 사용할 수 있습니다
arr - [arr[0]] 또는 다른 arr - [arr.shift()] 하거나 arr.shift(1)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.