1

私はRubyに次のような配列を持っています:

[ 0] "Red",
[ 1] "Green",
[ 2] "Blue",
[ 3] "Yellow",
[ 4] "Cyan",
[ 5] "Magenta",
[ 6] "Orange",
[ 7] "Purple",
[ 8] "Pink",
[ 9] "White",
[10] "Black"

たとえばYellowとPurpleの間の値を検索し、次のようになるように配列を再構築する必要があります。

[ 0] "Red",
[ 1] "Green",
[ 2] "Blue",
[ 3] [[0] "Cyan",[1] "Magenta",[2] "Orange" ],
[ 4] "Cyan",
[ 5] "Magenta",
[ 6] "Orange",
[ 7] "Purple",
[ 8] "Pink",
[ 9] "White",
[10] "Black"

Rubyでこれを行う簡単な方法はありますか?

4

3 に答える 3

3

Array#index値をArray#sliceに渡します

インデックス位置ではなくセルの値で配列をスライスする場合は、Array#index値を引数としてArray#sliceに渡すことができます。例えば:

colors = ["Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", 
          "Orange", "Purple", "Pink", "White", "Black"]

colors.slice colors.index('Yellow'), colors.index('Purple')
# => ["Yellow", "Cyan", "Magenta", "Orange", "Purple", "Pink", "White"]
于 2012-09-03T20:50:17.853 に答える
2
ar = %w(red green blue yellow cyan magenta orange purple pink white black)
i = ar.index('yellow')
ar[i] = ar[i+1 ... ar.index('purple')]
p ar #=> ["red", "green", "blue", ["cyan", "magenta", "orange"], "cyan", "magenta", "orange", "purple", "pink", "white", "black"]
于 2012-09-03T20:52:15.417 に答える
0

重要なのは、配列のインデックスヘルパーを介して開始点と終了点を取得し、その間の配列を取得して開始位置に置き換えることです。

def rearrange arr,from,to
  sidx = arr.index from
  eidx = arr.index to
  arr[sidx] = arr[sidx+1..eidx]
end

arr= ["Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", "Orange", "Purple", "Pink", "White", "Black"]
start = "Yellow"
stop = "Orange"

puts arr.inspect
#=> ["Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", "Orange", "Purple", "Pink", "White", "Black"]
rearrange arr,start,stop
puts arr.inspect
#=> ["Red", "Green", "Blue", ["Cyan", "Magenta", "Orange"], "Cyan", "Magenta", "Orange", "Purple", "Pink", "White", "Black"]
于 2012-09-03T20:55:09.183 に答える