3

私の質問はこれに似ています。基本的にCSVファイルがありますが、PIDが重複していますが、次のようにすることはできません.uniq

File.open("new.csv", "w+") { |file| file.puts File.readlines("old.csv").uniq }

線が違うので。私はRubyを初めて使用し、最初の列だけに基づいて行全体を削除するエレガントな方法があるかどうか疑問に思っていましたか?または、各行を調べて重複するPIDを探す必要がありますか?

4

2 に答える 2

8

ブロックを渡しuniqて、重複した要素を削除する要件を指定できます。

File.open("old.csv", "w+") do |file|
  file.puts File.readlines("csv.csv").uniq! { |s| s[/^\d+/ ] }
end

uniqドキュメントで説明されているとおりです。

/^\d+/正規表現をあなたに合った人に置き換えてください。

于 2012-07-16T15:54:55.697 に答える
4

pid が 2 番目の列であるとしましょう:

CSV.open('new.csv', 'w') do |csv|
  CSV.read('old.csv').uniq{|x| x[1]}.each do |row|
    csv << row
  end
end
于 2012-07-17T05:23:37.603 に答える