2

たとえば、10個の要素のルビー配列があり、5番目の要素を除くすべてを返したいと思います。

a = *(1..10)

こんなことができるようになりたい

a[0..3 + 5..9]

または、(R構文から借用する)のようなさらに良いもの、

a[-4]

これを行うには、それは機能しません。(要素インデックスの配列を取得するなど、私が試したより賢いこともしません)。ルビーでこれを行うための最良の方法は何ですか?

4

3 に答える 3

5

次を使用できますvalues_athttp ://www.ruby-doc.org/core-1.9.3/Array.html#method-i-values_at

だからあなたはそれをとして使うかもしれません

a.values_at(0..3, 5..9)
于 2012-08-21T23:29:56.427 に答える
4

黒魔術は必要ありません:

a[0..3] + a[5..9]
于 2012-08-21T23:25:18.167 に答える
1

下のドキュメントを見てください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番目の要素がない配列)が返されます。

于 2012-08-21T23:29:54.057 に答える