0

@data@x@y、および@zはすべて同じ型の配列です。ビューで @data を使用して反復処理し、すべての値を表示します。

  @data = if params[:a] == "1"
    @x
  elsif params[:b] == "1"
    @y 
  elsif params[:c] == "1"
    @z

私がやりたいことは、複数のパラメーターが適用されている場合、配列を交差させることです。したがって、たとえば、?a=1&b=2URL に が追加されている場合は@data@x & @y

このコードの書き方がわかりません。どの params == 1 であるかを特定し、対応する配列と交差して @data に格納する最も簡単な方法は何ですか?

4

2 に答える 2

3

幸い、Rubyを使用するとこれが簡単になります。

@data = [params[:a] && @x, params[:b] && @y, params[:c] && @z].compact.inject(:&)

これにより、配列(パラメーターが存在する場合。== '1'より具体的にしたいかどうかを確認できます)またはnils(存在しない場合)のいずれかの配列が作成されます。compact次に、配列からnilを取り除き、。を呼び出すことで残りの値を交差させることができますinject(:&)

呼び出しは値のinject配列を繰り返し処理し、最初の値を取得&してから、次の値をパラメーターとして使用してメソッドを適用します。次に、結果を&取得して3番目のパラメーターを適用し、以下同様に、渡された配列内のすべての配列の共通部分である最終値を生成します。

于 2012-12-11T00:12:18.543 に答える
1

これはどうですか

key_to_array = {:a => @x, :b => @y, :c => @z}

@data = key_to_array.select { |k, _| params[k] == '1' }.values.inject(&:&)

※Ruby1.8では動作しません

于 2012-12-11T00:11:05.063 に答える