0

以下のコードをご覧ください

def test
  array = Array.new
  array2 = Array.new

  groups = [[424235, "goa", "italy"], [523436, "mumbai"], [342423, "africa", "goa"]]
  type = ["goa", "mumbai"]
  groups.each_with_index do |item,index|

       if item.include?(type[0]) == true
         array << index  << array2
        elsif item.include?(type[1]) == true
               array2 << index 
       else
         "nothing ;)"
       end

  end
  print array.each_slice(2).map { |a, b| [a, b.first] }
end
combine

#Output - [[0, 1], [2, 1]]

コードの問題がわかりますか?つまり、私は一連のifおよびelseステートメントを使用しています。type配列に3つ以上のエントリがある場合はどうなりますか。ifステートメントとelsifステートメントを書き続けることはできません。そして、それは私があなたの助けを必要とするところです。コードを構造化するためのより良いものは何ですか?ループ?もしそうなら、どのように。

4

1 に答える 1

2

これが私のコードです。

def combinations(groups, types)
  array = Array.new(types.size) { Array.new([]) }
  groups.each_with_index do |item, index|
     types.each_with_index { |type, i| array[i] << index if item.include? type }
  end

  flat = array.inject { |acc, i| acc.product i }.flatten
  flat.each_slice(types.size).to_a
end

サンプルテストケース

combinations([[424235, "goa", "italy"], [523436, "mumbai"], [342423, "africa", "goa"]], ["goa", "mumbai"])

出力:[[0, 1], [2, 1]]

combinations([[424235, "goa", "italy"], [523436, "mumbai"], [342423, "africa", "goa"]], ["goa", "africa"])

出力:[[0, 2], [2, 2]]

combinations([[424235, "goa", "italy"], [523436, "mumbai"], [342423, "africa", "goa"], [123, "india"]], ["goa", "mumbai", "india"])

出力:[[0, 1, 3], [2, 1, 3]]

combinations([[424235, "goa", "italy"], [523436, "mumbai"], [342423, "mumbai", "goa"], [123, "india"]], ["goa", "mumbai", "india", "italy"])

出力:[[0, 1, 3, 0], [0, 2, 3, 0], [2, 1, 3, 0], [2, 2, 3, 0]]

私があなたの問題を正しく理解していれば、これらは正しいはずです。私はあなたを誤解したかもしれませんが。私があなたの問題を間違っているかどうか、そしてあなたが素晴らしいテストケースを提供することができれば私に教えてください。

于 2013-02-17T13:15:49.673 に答える