it-source

루비 배열의 마지막 요소를 제외한 모든 요소

criticalcode 2023. 6. 30. 22:25
반응형

루비 배열의 마지막 요소를 제외한 모든 요소

제가 루비 배열을 가지고 있다고 칩시다.

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]

호심에서좋, 왜당은않지습까니아하신기?않까습니▁out▁you▁dont▁like'를 좋아하지 않나요?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

저는 이렇게 합니다.

my_array[0..-2]

를 수행하고 .pop()을 요소 데 관심이 있는에는 마대작업한이배(지항삭제됨이목막다)얻지열팝만(업요에배을있열니)데는수있관사습심대를 사용할 수 .tap(&:pop):

> arr = [1, 2, 3, 4, 5]
> arr.pop
=> 5
> arr
=> [1, 2, 3, 4]
> arr.tap(&:pop)
=> [1, 2, 3]

예를 들어, 드롭 방법 자체를 확대하는 것은 어떻습니까?

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]가장 좋은 방법인 것 같습니다.배열 슬라이싱 구문은 정확히 이 목적을 위해 만들어졌습니다...

하는 것이 또배열수는것괜면찮다이요걸세, 어전를보화그냥는정을하요▁call▁▁just▁in걸▁you보어▁the▁could라고 부르면 됩니다.a.pop:

>> a = [1, 2, 3, 4]
>> a.pop
>> a
=> [1, 2, 3]

한 줄에 있는 마지막 요소를 제거하고 나머지 요소를 반환하는 방법

[1, 2, 4, 5, 6].reverse.drop(1).reverse

근데 진짜로.

[1,2,3,4][0..-2]
#=> [1,2,3]

방법은 다음과 같습니다.

[1,2,3,4,5][0..-1-1]

하지만 이것이 어떻게 작동하는지 설명해 보겠습니다.

a = [1,2,3,4,5]

다음 예제에서는 0 위치에서 마지막 위치까지 모든 레코드를 반환합니다.

a[0..-1]
=> [1, 2, 3, 4, 5]

다음 예제에서는 레코드를 한 위치에서 마지막 위치로 반환합니다.

a[1..-1]
=> [2, 3, 4, 5]

그리고 여기 당신이 필요로 하는 것이 있습니다.다음 예제에서는 레코드를 0 위치에서 마지막 1 위치로 반환합니다.

a[0..-1-1]
=> [1, 2, 3, 4]

"테이크" 해봤어요?

a.take(3) 

예: a.τwτ하지만 먼저 파이퍼를 설치해야 합니다.

파이퍼 인트로:당신은 리스피를 아나?car그리고.cdr배열의 "첫 번째"와 "나머지"를 반환하시겠습니까?당신과 같은 필요를 위해, 저는 이 리스피 메커니즘을 확장했습니다.고라합니다라고 불립니다.pyper그리고 그것은 또한 당신이 2번째, 2번째, 3번째, 3번째, 3번째, 그리고 마지막 등을 제외한 모든 것에 접근할 수 있도록 합니다. 것은 것은별쓸만것아만지니은, 한를구수있다니습도, ▁like, ▁▁letter,▁that,osition, 다마▁allows▁also니습있수처럼 글자를 구성할 수도 있습니다.caar,cadr,cdadar리스프에서 알려진 등:

# First, gem install pyper
require 'pyper'
include Pyper
a = %w/lorem ipsum dolor sit amet/
# To avoid confusion with other methods, and also because it resembles a rain gutter,
# Greek letter τ is used to delimit Pyper methods:
a.τaτ #=> "lorem"
a.τdτ #=> ["ipsum", "dolor", "sit", "amet"]
a.τbτ #=> "ipsum"
a.τeτ #=> ["dolor", "sit", "amet"]
a.τcτ #=> "dolor" (3rd)
a.τzτ #=> "amet" (last)
a.τyτ #=> "sit" (2nd from the end)
a.τxτ #=> "dolor" (3rd from the end)

그리고 마지막으로, 당신의 질문에 대한 대답:

a.τwτ #=> ["lorem", "ipsum", "dolor", "sit"] (all except last)

추가 정보:

a.τuτ #=> ["lorem", "ipsum", "dolor"] (all except last 2)
a.τ1τ #=> ["lorem", "ipsum"] (first 2)
a.τ8τ #=> (last 2)
a.τ7τ #=> (last 3)

구성:

a.τwydτ #=> "olor" (all except 1st letter of the last word of all-except-last array)

또한 명령 문자가 더 많습니다.a..f,u..z그리고.0..9가장 현저하게m의미 맵:

a.τwmbτ #=> ["o", "p", "o", "i"] (second letters of all-except-last array)

그러나 다른 명령 문자는 너무 뜨겁고 현재 사용하기가 쉽지 않습니다.

이렇게 하면 원본의 마지막 요소를 제외한 모든 요소로 새 배열이 만들어집니다.

ary2 = ary.dup
ary2.pop

몇몇 다른 사람들은 #pop을 사용할 것을 제안했습니다.배열을 제자리에서 수정하는 것이 괜찮으시다면 괜찮습니다.문제가 없으면 이 예제에서와 같이 먼저 배열을 접습니다.

저는 종종 배열의 마지막 n개 요소를 제외한 모든 요소를 필요로 하는 제 자신을 발견합니다.다른 솔루션보다 읽기 쉬운 방식으로 이 작업을 수행할 수 있도록 자체 기능을 설정했습니다.

class Array
  def all_but_the_last(n)
    self.first(self.size - n)
  end
end

이제 다음을 수행할 수 있습니다.

arr = ["One", "Two", "Three", "Four", "Five"]
# => ["One", "Two", "Three", "Four", "Five"]

arr.all_but_the_last(1)
# => ["One", "Two", "Three", "Four"]

arr.all_but_the_last(3)
# => ["One", "Two"]

arr.all_but_the_last(5)
# => []

arr.all_but_the_last(6)
# ArgumentError: negative array size

저는 의도적으로 인수 오류를 허용하여 호출자가 이 방법을 사용하는 방법에 대해 책임을 집니다.저는 이 접근 방식에 대한 의견/비판을 듣고 싶습니다.

a = [1,2,3,4]

a[0..(a.length - 2)]
=> [1,2,3]

언급URL : https://stackoverflow.com/questions/1604305/all-but-last-element-of-ruby-array

반응형