2013-11-25 119 views
0

我有以下代碼。刪除循環中的重複項

for i in 0..sold.length-1 
    duplicate = sold[i] 
    print duplicate.check_duplicates 
    print "  " 
    print sold[i].lotnumber + "\t" 

    print sold[i].serialnumber 

end 

這將打印

1  29371 43 
1  13797 6 
1  08114 55 
1  70657 106 
1  32741 74 
2  07272 103 
2  07272 103 
1  37416 14 
1  05153 177 
1  54338 115 
3  74522 171 
3  74522 171 
3  74522 171 

我怎樣才能移除重複(3 74522 171和2 07272 103),因此只有各1?

回答

1

group_by方法得到的散列可以被用作一個計數裝置;這不使用check_duplicates方法。

grouped = sold.group_by{|item| [item.lotnumber, item.serialnumber]} 
grouped.each{|key, value| puts "#{value.size} #{key.first}\t#{key.last}"} 
+0

抱歉貼錯了:)它像一個魅力工作 – user3033493

2
uniq_solds = sold.collect{|s| [s.check_duplicates, s.lotnumber, s.serialnumber]}.uniq 

uniq_solds.each do |s| 
    p s.join("  ") 
end 
+0

第二部分也可能是'puts uniq_solds.map {| s | s.join(「」)}' –

+0

我從sved.rb獲得以下錯誤:未定義的方法重複'(NoMethodError):81:in'from sved.rb:81:'

' – user3033493

+0

這是一個錯誤。修改我的回答 – usha