ruby array/list 的多类分区函数
Multiclass partition function for ruby array/list
我刚刚深入了解 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#delete
来改变元素:
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
# }
# ]
# }
我相信你正在寻找 Enumberable#group_by
:
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"}
# ]
# }
我刚刚深入了解 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#delete
来改变元素:
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
# }
# ]
# }
我相信你正在寻找 Enumberable#group_by
:
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"}
# ]
# }