-1

ああ。ここで、Ruby で配列を構築する方法を見つけようとして問題が発生しました。

そのため、結果をループしています。カテゴリ フィールドをキーとして追加し、次の行に同じカテゴリがある場合はそのカテゴリに入れられるようにします。そうでない場合は、新しい配列を作成し、それに追加します。

これが私がこれまでに持っているものです。

data = Array.new
results.each do |row|
   data[row.category].push row.field
end

どちらがうまくいかないか私は知っています。私は最終的に(ループの後)すべてのdata[row.category]を含む配列になりたいrow.field

したがって、このような配列になります。

[['Dogs', 5, 12, 2], ['Cats', 4, 5, 9], ['Fish', 25, 82, 23]]

したがって、何回ループしても、データに既に存在する配列にプッシュすると、それが追加されます。配列が存在しない場合は、それを作成してから追加します。

PHP では、単純に次のようにします。

$data[$row['category']][] = $row['field']

空の [] は、配列がない場合に新しい配列を作成することを示します。Rubyでこれを行うにはどうすればよいですか???

4

2 に答える 2

2

ええ、あなたは PHP とその連想配列 (他の言語では配列と呼ばれていません:)) に混乱しているようです。ハッシュが必要です。このスニペットを試してください:

data = results.each_with_object({}) do |row, memo|
  memo[row.category] ||= []  # create array unless it exists
  memo[row.category] << row.field
end
于 2013-01-16T05:57:57.347 に答える
0

PHP とは異なり、任意のオブジェクトを のインデックスとして使用することはできませんArray。Ruby では、Hashes を使用して、任意のオブジェクトを他のオブジェクトに関連付けます。

コードを次のように変更すると、コードが機能するはずです。

data = Hash.new { |hash, key| hash[key] = [] }

results.each do |row|
   data[row.category] << row.field
end
于 2013-01-16T05:55:49.620 に答える