作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
标题有点傻。
我正在开发一个用户可以出价的项目。生成的项目可以独占或分配给最多 3 个用户。一个用户可以独占下注 20 美元,另外 3 个用户可以同意进行 3 路拆分,每人只需支付 10 美元,结果是 30 美元,击败第一个出价者。
我需要浏览一份可能有十几个同意三方拆分的不同投标人的名单,以确定获胜的三人组:
Rza => $20 # loses
ODB + Gza => $25 # loses
InspectahDeck + Ghostface + ODB => $50 # wins
或者
Rza => $100,000 # wins
ODB + Gza => $25 # loses
InspectahDeck + Ghostface + ODB => $50 # loses
我所拥有的只是一个属于各种用户的 Bid
对象数组。我的目标是查看那些希望与其他人分开的人的所有可能组合,看看谁排在首位。
我试着做这样的事情:
bids.each do |bid1|
bids.each do |bid2|
bids.each do |bid3|
# Fill a hash here, but only if the permutation of the bids is unique
end
end
end
我遇到了困难,因为它看起来效率极低并且有大量重复项,有时相同的出价会出现两次。我需要一些帮助或提示来为我指明正确的方向。
我真的很难过
提前致谢。
PS:另一个棘手的细节:每个投标人可以设置多个投标。所以同一个人可以拥有 1 个独占、1 个 2-way 和 1 个 3-way。
最佳答案
假设你有这样的事情:
class Bid
attr_accessor :user # link to the user
attr_accessor :price # dollar amount
attr_accessor :way # 1 means 1-way, 2 means 2-way, 3 means 3-way
end
获得每种类型的最高赌注:
best_1_way = bids.select{|bid| bid.way == 1}.max
best_2_ways = bids.select{|bid| bid.way == 2}.sort[-2,2]
best_3_ways = bids.select{|bid| bid.way == 3}.sort[-3,3]
获取总价:
total_1_way_price = best_1_way.price
total_2_ways_price = best_2_ways.map(&:price).inject(&:+)
total_3_ways_price = best_3_ways.map(&:price).inject(&:+)
比较这三项,你就赢了。
如果您有很多出价并且想要优化:
all_1_ways, all_2_ways, all_3_ways =
bids.group_by{|bid| bid.way }.values_at(1,2,3)
关于ruby - 如何仅通过多个对象的唯一组合进行迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121775/
我是一名优秀的程序员,十分优秀!