[ruby] Ruby 배열의 마지막 요소를 제외한 모든 요소

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

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]