3

これは、配列、インデックス、およびスライスしたいアイテムの数を表す数値nです。

a = [0、1、2、3、4、5、6、7、8、9]
インデックス=5
n = 3

上記の引数はgive me 3 elements centered around index 5、に変換されます。[4,5,6]

数が偶数の場合は、左側または右側に追加の要素を配置するかどうかを任意に選択します。例:与えられn = 2た、[4, 5][5,6]はどちらも同じように有効です。

しかし、境界の場合を考慮する必要があります。とするindex = 1と、左側の境界に達したので、n = 5戻るはずです。[0,1,2,3,4]

同様に、とするindex = 8と、右側の境界に当たったのでn = 5戻るはずです。[5,6,7,8,9]

これを書くための良い方法は何ですか?

4

1 に答える 1

4

を使用してスライスを取得できますArray#[]

したがって、次のようなものが正常に機能するはずです。

arr[offset - (count / 2), count]

オフセットとカウントがFixnumsである場合、rubyは、指定された要件を満たすために除算と丸めを正しく処理します。

編集| 負のオフセットには特別な意味があるため、おそらく算術演算もサニタイズする必要があり#sliceます。次に、カウント全体が収まるように最終値をサニタイズする必要もあります。

arr[
  [[offset - (count / 2), 0].max, arr.size - count].min,
  count
]

今は少し毛むくじゃらになっていますが、とにかくそれだけです。

于 2012-05-27T04:49:34.110 に答える