2014-04-10 2 views
0
array = ["a > 1 2 3", "a > 4 5 6", "a > 7 8 9", "b > 1 2 3", "b > 4 5 6", "b > 7 8 9", "b > 10 11 12"] 

문자열의 시작 값으로 배열을 그룹화/분할하려고합니다. 그래서 나도 몰라 나는동적 요소가있는 루비 배열 group_by

array.group_by{|t| t[0]}.values 

array = [["a > 1 2 3", "a > 4 5 6", "a > 7 8 9"], ["b > 1 2 3", "b > 4 5 6", "b > 7 8 9", "b > 10 11 12"]] 

... 요소가 정적 경우 내가 GROUP_BY 사용할 수 있습니다 알고 있지만 아무것도하기 전에 ">"는 동적 얼마나 '일치' 'a', 'b'가 베일 될에 그들을 그룹화합니다.

+0

난 당신이 '동적'예를 보여줄 필요가 있다고 생각. –

+0

앞으로는 대답을 선택하기 전에 잠시 보류하시기 바랍니다. 빠른 선택은 다른 사람들이 더 나은 답변을 제공하지 못하도록하고, 녹색 체크 표시가 적용될 때 답변을 준비하는 사람에게는 무례합니다. (두 번째 요점은 답을 받아 들인 후에 내 대답에 대한 작업을 시작하면서 우연히 나에게 적용되지 않습니다.) –

답변

2

당신이 할 수있는 :

array.group_by { |t| t.split(/\s*>\s*/).first }.values 
+0

대단한 덕분에 xdazz! – JoMojo

1

이 당신이 그것을 할 수있는 또 다른 방법이다 :

코드

array.sort.chunk { |str| str[/^[a-z]+\s>/] }.map(&:last) 

설명

array = ["a > 1 2 3", "a > 4 5 6", "a > 7 8 9", "b > 1 2 3", 
     "b > 4 5 6", "b > 7 8 9", "b > 10 11 12"] 
a = array.sort 
    #=> ["a > 1 2 3", "a > 4 5 6", "a > 7 8 9", 
    # "b > 1 2 3", "b > 10 11 12", "b > 4 5 6", "b > 7 8 9"] 
enum = a.chunk { |str| str[/^[a-z]+\s>/] } 
    #=> #<Enumerator: #<Enumerator::Generator:0x0000010304ee40>:each> 

이 열거 enum의 내용을 보려면 :

enum.to_a 
    #=> [["a >", ["a > 1 2 3", "a > 4 5 6", "a > 7 8 9"]], 
    # ["b >", ["b > 1 2 3", "b > 10 11 12", "b > 4 5 6", "b > 7 8 9"]]] 

enum.map(&:last) 
    #=> [["a > 1 2 3", "a > 4 5 6", "a > 7 8 9"], 
    # ["b > 1 2 3", "b > 10 11 12", "b > 4 5 6", "b > 7 8 9"]]