2017-01-04 1 views
0

방금 ​​루비의 기능적 측면에 대해 자세히 알아보고 map/reduce 및 일부 필터링을 사용하여 작업하고 있습니다.루비 배열 /리스트를위한 멀티 클래스 파티션 함수

지금 나는 다음과 같은 구조의 항목의 목록을 지점으로 입수했습니다 :

{:price=>100.0, :size=>'small', :description=>'some description'} 

:size의 값이 ['small', 'medium', 'large'] 중 하나가 될 수 있습니다.

이러한 값 각각에 대해 필터 기능을 설정하지 않고 크기가 작거나 중간이거나 큰 요소 만 사용하여 전체 목록을 하위 목록으로 분할하는 방법이 있습니까?

기본적으로 몇 가지 멀티 클래스 Array.partition이 있는지 묻습니다.

도움 주셔서 감사합니다.

답변

4

을 :

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"} 
    #  ] 
    # } 
+0

고마워, 그게 내가 찾고 있던 바로 그거야! – Minato

+1

@Minato 'price','size' 및'description'에 대한 접근 자 메서드를 사용하여 목록 항목에 적절한 클래스를 사용하고자 할 수 있습니다. 그러면'group_by (& : size)'를 쓸 수 있습니다. – Stefan

+0

잘 알고 있습니다! 그러나이 양식은 관련된 여러 변환으로 인해 목록 항목이 취하는 여러 양식 중 하나 일 뿐이므로 지금은 해시를 유지할 것입니다. – Minato

3
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을 사용하여, 해시의 크기를 포함 할 수 없습니다 결과를 고려 여부 : 난 당신이 Enumberable#group_by 찾고있는 생각

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 
# } 
# ] 
# } 
+0

고맙습니다! 그룹으로 묶는 키를 삭제할 수 있다는 것을 아는 것이 좋습니다! – Minato

+0

당신이 그것을 할 수 있는지 몰랐습니다! 아주 멋지다! –