ruby数组/列表的多类分区函数
我刚刚深入了解了ruby的功能方面,正在处理map/reduce和一些过滤 现在,我有一个如下结构的项目列表:ruby数组/列表的多类分区函数,ruby,dictionary,filter,functional-programming,reduce,Ruby,Dictionary,Filter,Functional Programming,Reduce,我刚刚深入了解了ruby的功能方面,正在处理map/reduce和一些过滤 现在,我有一个如下结构的项目列表: {:price=>100.0, :size=>'small', :description=>'some description'} :size的值可以是['small'、'medium'、'large']中的一个 是否有一种方法可以将整个列表划分为子列表,其中只包含大小为小、中、大的元素,而不为每个值设置过滤函数 基本上我是在问是否有一些多类Array.parti
{:price=>100.0, :size=>'small', :description=>'some description'}
:size
的值可以是['small'、'medium'、'large']
中的一个
是否有一种方法可以将整个列表划分为子列表,其中只包含大小为小、中、大的元素,而不为每个值设置过滤函数
基本上我是在问是否有一些多类Array.partition
谢谢你的帮助
input = [
{:price=>100.0, :size=>'small', :description=>'some description 1'},
{:price=>100.0, :size=>'large', :description=>'some description 2'},
{:price=>100.0, :size=>'small', :description=>'some description 3'},
{:price=>100.0, :size=>'large', :description=>'some description 4'},
{:price=>100.0, :size=>'small', :description=>'some description 5'},
{:price=>100.0, :size=>'small', :description=>'some description 6'}
]
input.group_by { |e| e[:size] }
是否考虑结果不包含哈希中的大小,使用<代码> Hash→删除>代码>使元素发生变化:
input.group_by { |e| e.delete :size }
#⇒ {
# "large" => [
# [0] {
# :description => "some description 2",
# :price => 100.0
# },
# [1] {
# :description => "some description 4",
# :price => 100.0
# }
# ],
# "small" => [
# [0] {
# :description => "some description 1",
# :price => 100.0
# },
# [1] {
# :description => "some description 3",
# :price => 100.0
# },
# [2] {
# :description => "some description 5",
# :price => 100.0
# },
# [3] {
# :description => "some description 6",
# :price => 100.0
# }
# ]
# }
我相信您正在寻找:
谢谢,这正是我要找的@Minato您可能希望为列表项使用一个合适的类,该类具有
price
、size
和description
的访问器方法。这将允许您按(&:size)编写分组。很高兴知道!但我现在将继续使用散列,因为由于涉及到多个转换,此表单只是列表项采用的多个表单之一。谢谢!很高兴知道您可以删除分组依据的密钥!
list = [
{:price=>100.0, :size=>'small', :description=>'some description'},
{:price=>123.0, :size=>'small', :description=>'some description 2'},
{:price=>456.0, :size=>'medium', :description=>'some description 3'}
]
list.group_by {|item| item[:size]}
# => {
# "small" => [
# {:price=>100.0, :size=>"small", :description=>"some description"},
# {:price=>123.0, :size=>"small", :description=>"some description 2"}
# ],
# "medium" => [
# {:price=>456.0, :size=>"medium", :description=>"some description 3"}
# ]
# }