-1

私がやろうとしていることは、私の質問が尋ねるよりも少し複雑ですが、私がやりたいことを言葉で表現することはできず、私の用語はおそらく間違っています。ごめん。後で質問のタイトルを編集して、やりたいことをより適切に表すことができれば、そうします。

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

array = [
  ["bnb ><b>(BASE CABINET)</b>", "bnb ><b>(BASE CABINET)</b>", "1", "22\"", "22\"", "22\""]
  ["bnb >Edgebanding (sides)", "bnb >Edgebanding (sides)", "2", "22\"", "1/2\"", "1/2\""]
  ["bnb >Edgebanding (top/bottom)", "bnb >Edgebanding (top/bottom)", "2", "21\"", "1/2\"", "1/2\""]
  ["bnb >Panel (back)", "bnb >Panel (back)", "1", "21\"", "21\"", "1/2\""]
  ["bnb >Panel (sides)", "bnb >Panel (sides)", "2", "21 1/2\"", "21\"", "1/2\""]
  ["bnb >Panel (top/bottom)", "bnb >Panel (top/bottom)", "1", "22\"", "21 1/2\"", "1/2\""]
  ["bnb >Top (front/back)", "bnb >Top (front/back)", "2", "22\"", "3\"", "1/2\""]
  ["bnb >Top (sides)", "bnb >Top (sides)", "2", "15 1/2\"", "3\"", "1/2\""]
]

私がやろうとしているのは、結果として、基本的>に各サブ配列の最初の要素の後にあるすべてを削除し>、サブ配列の2番目の要素の前にあるすべてを削除することです。

array = [
  ["bnb", "<b>(BASE CABINET)</b>", "1", "22\"", "22\"", "22\""]
  ["bnb", "Edgebanding (sides)", "2", "22\"", "1/2\"", "1/2\""]
  ["bnb", "Edgebanding (top/bottom)", "2", "21\"", "1/2\"", "1/2\""]
  ["bnb", "Panel (back)", "1", "21\"", "21\"", "1/2\""]
  ["bnb", "Panel (sides)", "2", "21 1/2\"", "21\"", "1/2\""]
  ["bnb", "Panel (top/bottom)", "1", "22\"", "21 1/2\"", "1/2\""]
  ["bnb", "Top (front/back)", "2", "22\"", "3\"", "1/2\""]
  ["bnb", "Top (sides)", "2", "15 1/2\"", "3\"", "1/2\""]
]

これが私がこれまでに持っているコードです:

val = 0
@test_list = []
test.each do |comp|
  new_list = test[val]
  new_list.map! { |element| element.gsub(/\s\>.*/, '') }
  comp = comp[0]
  @test_list.push(new_list)
  val = val + 1
end

これは後のすべてを削除します>が、最初と2番目の要素の両方で削除します。

4

2 に答える 2

1

問題に直面したときに正規表現を使用する必要はありません:)単純な場合もありString#splitます。

source_array = [
  ["bnb ><b>(BASE CABINET)</b>", "bnb ><b>(BASE CABINET)</b>", "1", "22\"", "22\"", "22\""],
  ["bnb >Edgebanding (sides)", "bnb >Edgebanding (sides)", "2", "22\"", "1/2\"", "1/2\""],
  ["bnb >Edgebanding (top/bottom)", "bnb >Edgebanding (top/bottom)", "2", "21\"", "1/2\"", "1/2\""],
  ["bnb >Panel (back)", "bnb >Panel (back)", "1", "21\"", "21\"", "1/2\""],
  ["bnb >Panel (sides)", "bnb >Panel (sides)", "2", "21 1/2\"", "21\"", "1/2\""],
  ["bnb >Panel (top/bottom)", "bnb >Panel (top/bottom)", "1", "22\"", "21 1/2\"", "1/2\""],
  ["bnb >Top (front/back)", "bnb >Top (front/back)", "2", "22\"", "3\"", "1/2\""],
  ["bnb >Top (sides)", "bnb >Top (sides)", "2", "15 1/2\"", "3\"", "1/2\""]
]

target_array = [
  ["bnb", "<b>(BASE CABINET)</b>", "1", "22\"", "22\"", "22\""],
  ["bnb", "Edgebanding (sides)", "2", "22\"", "1/2\"", "1/2\""],
  ["bnb", "Edgebanding (top/bottom)", "2", "21\"", "1/2\"", "1/2\""],
  ["bnb", "Panel (back)", "1", "21\"", "21\"", "1/2\""],
  ["bnb", "Panel (sides)", "2", "21 1/2\"", "21\"", "1/2\""],
  ["bnb", "Panel (top/bottom)", "1", "22\"", "21 1/2\"", "1/2\""],
  ["bnb", "Top (front/back)", "2", "22\"", "3\"", "1/2\""],
  ["bnb", "Top (sides)", "2", "15 1/2\"", "3\"", "1/2\""]
]

arr = source_array.map do |a|
  [
   a[0].split('>').first.strip,
   a[1].split('>', -1)[1..-1].join('>')
  ] + a[2..-1]
end

arr == target_array # => true
于 2012-04-14T02:08:14.220 に答える
0

Array.each_with_indexおそらくあなたが望むものです。インデックスチェックを使用すると、それが最初か2番目かを判断できます

arr=[
["bnb ><b>(BASE CABINET)</b>", "bnb ><b>(BASE CABINET)</b>", "1", "22\"", "22\"", "22\""],
["bnb >Edgebanding (sides)", "bnb >Edgebanding (sides)", "2", "22\"", "1/2\"", "1/2\""],
["bnb >Edgebanding (top/bottom)", "bnb >Edgebanding (top/bottom)", "2", "21\"", "1/2\"", "1/2\""],
["bnb >Panel (back)", "bnb >Panel (back)", "1", "21\"", "21\"", "1/2\""],
["bnb >Panel (sides)", "bnb >Panel (sides)", "2", "21 1/2\"", "21\"", "1/2\""],
["bnb >Panel (top/bottom)", "bnb >Panel (top/bottom)", "1", "22\"", "21 1/2\"", "1/2\""],
["bnb >Top (front/back)", "bnb >Top (front/back)", "2", "22\"", "3\"", "1/2\""],
["bnb >Top (sides)", "bnb >Top (sides)", "2", "15 1/2\"", "3\"", "1/2\""]
]

new_arr = 
arr.map do |sub_arr|
    sub_arr.each_with_index.map do |str,i|
        if i == 0
            str.gsub(/\s\>.*/,'')
        elsif i == 1
            str.gsub('bnb >','')
        else
            str
        end
    end
end

p new_arr

これは、機能する予備的なソリューションです。これはいつでも独自のスタイルに変えることができます。たとえば、do end to braceを変更する、map!を使用する、ifステートメントを同じ行に変更するなどです。

于 2012-04-14T02:15:57.550 に答える