루비 배열이 있다고 가정 해 봅시다.
a = [1, 2, 3, 4]
첫 번째 항목을 제외한 모든 것을 원하면 쓸 수 있습니다 a.drop(1)
. 그래도 마지막 항목을 제외한 모든 것을 원한다면 이 방법 만 생각할 수 있습니다
a[0..-2] # or
a[0...-1]
그러나 이것들 중 어느 것도 사용하는 것만 큼 깨끗한 것처럼 보이지 않습니다 drop
. 내가 놓친 다른 내장 방법은 무엇입니까?
답변
혹시…
a = t # => [1, 2, 3, 4]
a.first a.size - 1 # => [1, 2, 3]
또는
a.take 3
또는
a.first 3
또는
a.pop
마지막을 반환하고 배열 앞에 모든 것을 남겨 둡니다.
또는 저녁 식사를 위해 컴퓨터를 작동 시키십시오 .
a.reverse.drop(1).reverse
또는
class Array
def clip n=1
take size - n
end
end
a # => [1, 2, 3, 4]
a.clip # => [1, 2, 3]
a = a + a # => [1, 2, 3, 4, 1, 2, 3, 4]
a.clip 2 # => [1, 2, 3, 4, 1, 2]
답변
호기심에서, 당신은 왜 안 좋아 a[0...-1]
합니까? 배열 조각을 얻으려고하므로 조각 연산자는 관용적 인 선택처럼 보입니다.
그러나 이것을 모든 곳에서 호출 해야하는 경우 DigitalRoss가 제안한 것처럼 항상 더 친숙한 이름의 메소드를 Array 클래스에 추가 할 수 있습니다. 아마도 이것처럼 :
class Array
def drop_last
self[0...-1]
end
end
답변
또 다른 멋진 트릭
>> *a, b = [1,2,3]
=> [1, 2, 3]
>> a
=> [1, 2]
>> b
=> 3
답변
pop()
배열 에서 작업 을 수행 하려고하지만 (마지막 항목이 삭제되는 경우) 팝 된 요소 대신 배열을 얻는 데 관심이 있다면 다음을 사용할 수 있습니다 tap(&:pop)
.
> arr = [1, 2, 3, 4, 5]
> arr.pop
=> 5
> arr
=> [1, 2, 3, 4]
> arr.tap(&:pop)
=> [1, 2, 3]
답변
나는 이렇게한다 :
my_array[0..-2]
답변
예를 들어 드롭 방법 자체를 보강하는 것은 어떻습니까?
class Array
def drop(n)
n < 0 ? self[0...n] : super
end
end
그런 다음 음수 크기를 사용하여 끝에서 요소를 제거 할 수 있습니다.
[1, 2, 3, 4].drop(-1) #=> [1, 2, 3]
[1, 2, 3, 4].drop(-2) #=> [1, 2]
답변
a[0...-1]
가장 좋은 방법 같습니다. 배열 슬라이싱 구문은 정확히이 목적으로 만들어졌습니다 …
또는 배열을 수정하는 것이 마음에 들지 않으면 a.pop
다음을 호출하면됩니다 .
>> a = [1, 2, 3, 4]
>> a.pop
>> a
=> [1, 2, 3]