1

簡単にするために、ID とコメントの 2 つのフィールドで構成される .csv ファイルがあります。ID の行は、各コメント フィールドが生成元のテーブルの最大文字数に達し、別の行が必要な場所で複製されます。次に、Ruby を使用して、連想コメントをマージして、一意の ID ごとに 1 つの行を作成する必要があります。

説明するために、私はRubyでこれを作ろうとしています:

ID | コメント
1 | フラグメント 1
1 | フラグメント 2
2 | フラグメント 1
3 | フラグメント 1
3 | フラグメント 2
3 | フラグメント 3

これに:

ID | コメント
1 | フラグメント 1 フラグメント 2
2 | フラグメント 1
3 | フラグメント 1 フラグメント 2 フラグメント 3

私は inject({}) と hashmap を使用してこれを行う方法を見つけることに近づいていますが、すべてのデータを正しくマージする作業を続けています。その間、私のコードは複数のハッシュと配列で複雑になりすぎて、選択的な行をマージするだけになっているようです。

このタイプの行マージを実現するための最良/最も簡単な方法は何ですか? 配列だけでできますか?

Rubyでこれを通常どのように行うかについてのアドバイスをいただければ幸いです。

4

2 に答える 2

4

ヘッダーを保持し、ID によるグループを使用します。

rows = CSV.read 'comment.csv', :headers => true
rows.group_by{|row| row['ID']}.values.each do |group|
  puts [group.first['ID'], group.map{|r| r['COMMENT']} * ' '] * ' | '
end

0 と 1 を使用できますが、ヘッダー フィールド名を使用する方が明確だと思います。

于 2012-06-11T00:22:30.477 に答える