Array#dropは、配列の最初のn要素を削除します。配列の最後のm 個の要素を削除する良い方法は何ですか? あるいは、配列の中間要素 ( nより大きい、mより小さい) を保持する良い方法は何ですか?
質問する
15575 次
8 に答える
28
これはまさにArray#pop
次の目的です。
x = [1,2,3]
x.pop(2) # => [2,3]
x # => [1]
于 2012-11-23T17:16:31.110 に答える
9
Array#slice メソッドを使用することもできます。
[1,2,3,4,5,6].slice(1..4) # => [2, 3, 4, 5]
また
a = [1,2,3,4,5,6]
a.take 3 # => [1, 2, 3]
a.first 3 # => [1, 2, 3]
a.first a.size - 1 # to get rid of the last one
于 2012-11-23T17:08:57.360 に答える
2
drop
(最初の n 個の要素を削除する)の最も正反対は、最初の n 個take
の要素を保持する です ( にtake_while
類似したものもありますdrop_while
)。
Slice を使用すると、範囲またはオフセットと長さを指定して、配列のサブセットを返すことができます。Array#[] は、引数として範囲を渡された場合、または 2 つの数値が渡された場合と同じように動作します
于 2012-11-23T17:11:11.430 に答える
1
戻り値を、削除された要素のない配列にしたかったのです。私はここでいくつかの解決策を見つけました:
count = 2
[1, 2, 3, 4, 5].slice 0..-(count + 1) # => [1, 2, 3]
[1, 2, 3, 4, 5].tap { |a| a.pop count } # => [1, 2, 3]
しかし、配列の順序が重要でない場合 (私の場合、ファイルを削除していた場合) は、より読みやすい別の解決策を見つけました。
count = 2
[1, 2, 3, 4, 5].reverse.drop count # => [3, 2, 1]
順序を維持する必要がある場合は、そこに別のものを追加できますが、その時点で.reverse
の解決策を好むと思います.tap
于 2018-10-11T05:52:27.160 に答える
1
これにより、最後の n 要素が削除されます。
a = [1,2,3,4,5,6]
n = 4
p a[0, (a.size-n)]
#=> [1, 2]
n = 2
p a[0, (a.size-n)]
#=> [1, 2, 3, 4]
「中間」要素について:
min, max = 2, 5
p a.select {|v| (min..max).include? v }
#=> [2, 3, 4, 5]
于 2012-11-23T17:06:05.410 に答える
0
Array#delete_at() は、配列の最後の要素を削除する最も簡単な方法です。
arr = [1,2,3,4,5,6]
arr.delete_at(-1) # => [1,2,3,4,5]
配列のセグメントを削除するには、他の回答のメソッドを使用します。
于 2021-03-14T08:06:01.317 に答える
-2
いくつかのメソッドを追加することもできます
class Array
# Using slice
def cut(n)
slice(0..-n-1)
end
# Using pop
def cut2(n)
dup.tap{|x| x.pop(n)}
end
# Using take
def cut3(n)
length - n >=0 ? take(length - n) : []
end
end
[1,2,3,4,5].cut(2)
=> [1, 2, 3]
于 2012-11-23T17:12:27.757 に答える