首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Ruby的数组中找到所需值的正确方法是什么?

从Ruby的数组中找到所需值的正确方法是什么?
EN

Stack Overflow用户
提问于 2011-10-09 21:00:47
回答 4查看 96关注 0票数 3

我在Ruby中有一个数组:

代码语言:javascript
复制
price_list = [
  ['Brand-1', 'Model-1', 100.00],
  ['Brand-1', 'Model-2', 200.00],
  ['Brand-2', 'Model-1', 10.00],
  ['Brand-2', 'Model-2', 20.00],
  ['Brand-1', 'Model-1', 110.00],
  ['Brand-1', 'Model-2', 190.00],
  ['Brand-1', 'Model-3', 300.00],
  ...
  ['Brand-n', 'Model-n', 1234.00]
]

我需要创建新的阵列,只有独特的产品和最低的价格。如下所示:

代码语言:javascript
复制
new_price_list = [
  ['Brand-1', 'Model-1', 100.00],
  ['Brand-2', 'Model-1', 10.00],
  ['Brand-2', 'Model-2', 20.00],
  ['Brand-1', 'Model-2', 190.00],
  ['Brand-1', 'Model-3', 300.00],
  ...
  ['Brand-n', 'Model-n', 1234.00]
]

在Ruby中,最快、最漂亮的方式是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-09 21:45:18

Group by key (brand+model),然后获取分组数组的最低价格:

代码语言:javascript
复制
prices = [
  ['Brand-1', 'Model-1', 100.00],
  ['Brand-1', 'Model-2', 200.00],
  ['Brand-2', 'Model-1', 10.00],
  ['Brand-2', 'Model-2', 20.00],
  ['Brand-1', 'Model-1', 110.00],
  ['Brand-1', 'Model-2', 190.00],
  ['Brand-1', 'Model-3', 300.00],
]

grouped = prices.group_by { |brand, model, price| [brand, model] }
grouped.values.map { |grouped_prices| grouped_prices.min_by(&:last) }

输出:

代码语言:javascript
复制
[["Brand-1", "Model-2", 190.0],
 ["Brand-1", "Model-3", 300.0],
 ["Brand-2", "Model-1", 10.0],
 ["Brand-2", "Model-2", 20.0],
 ["Brand-1", "Model-1", 100.0]]
票数 5
EN

Stack Overflow用户

发布于 2011-10-09 21:07:23

代码语言:javascript
复制
items = Hash.new()
price_list.each{|brand,model,price|
     item=items[brand+model]
     items[brand+model]=[brand,model,price] if (!item||item[2]>price)
}
票数 1
EN

Stack Overflow用户

发布于 2011-10-09 21:36:13

如果你不需要按品牌和型号排序,可以这样做:

代码语言:javascript
复制
new_price_list = price_list.sort_by { |brand,model,price| price }.uniq {|brand, model, price| [brand, model] }

如果您还想对其进行排序,则必须重新排序

代码语言:javascript
复制
new_price_list = price_list.sort_by { |brand,model,price| brand + model }.sort_by { |brand,model,price| price }.uniq {|brand, model, price| [brand, model] }

编辑:带块的uniq仅适用于Ruby1.9

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7703668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档