ruby数组/列表的多类分区函数

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

我刚刚深入了解了ruby的功能方面,正在处理map/reduce和一些过滤

现在,我有一个如下结构的项目列表:

{: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"}
  #      ]
  #    }