たとえば、10個の要素のルビー配列があり、5番目の要素を除くすべてを返したいと思います。
a = *(1..10)
こんなことができるようになりたい
a[0..3 + 5..9]
または、(R構文から借用する)のようなさらに良いもの、
a[-4]
これを行うには、それは機能しません。(要素インデックスの配列を取得するなど、私が試したより賢いこともしません)。ルビーでこれを行うための最良の方法は何ですか?
次を使用できますvalues_at
:http ://www.ruby-doc.org/core-1.9.3/Array.html#method-i-values_at
だからあなたはそれをとして使うかもしれません
a.values_at(0..3, 5..9)
黒魔術は必要ありません:
a[0..3] + a[5..9]
下のドキュメントを見てくださいArray#delete_at
たとえば、myarray.delete_at(5)
結果として、要素5(もちろん、0から数えて)が欠けている配列になります。
例:
class Array
def without(n)
self.delete_at(n)
return self
end
end
arr = [1, 2, 3, 4]
p arr.without(1) #=> [1, 3, 4]
ただし、コメント投稿者が指摘しているように、これにより元の配列が変更され、OPが望んでいるものではない可能性があります。それが問題である場合は、次のように記述してください。
class Array
def without(n)
arr2 = Array.new(self)
arr2.delete_at(n)
return arr2
end
end
これにより、元の配列はそのままで、目的の配列(元の配列のn番目の要素がない配列)が返されます。