루비 배열의 마지막 요소를 제외한 모든 요소
제가 루비 배열을 가지고 있다고 칩시다.
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
'it-source' 카테고리의 다른 글
.gitignore가 .vmx 경로를 무시하지 않습니다. (0) | 2023.06.30 |
---|---|
ASP.NET 응용 프로그램을 디버깅하는 동안 Fiddler에서 로컬 호스트 트래픽을 표시하는 방법은 무엇입니까? (0) | 2023.06.30 |
파이썬의 모듈러 곱셈 역함수 (0) | 2023.06.30 |
Oracle 11g 데이터베이스에 원격으로 연결하는 방법 (0) | 2023.06.30 |
어떤 프로그램이 주어진 파일에 C 배열을 생성합니까? (0) | 2023.06.30 |