2012-10-10 30 views
2

關於Ruby哈希多串元素排序,首先關鍵的下降,考慮下面的哈希值的數組第二個關鍵上升

values = [ 
    {"one"=>"BA", "two"=>"AAB"}, 
    {"one"=>"AA", "two"=>"BBA"}, 
    {"one"=>"AA", "two"=>"BCB"}, 
    {"one"=>"AA", "two"=>"ABA"}, 
    {"one"=>"BC", "two"=>"AAC"}, 
    {"one"=>"AC", "two"=>"AAB"}, 
    {"one"=>"AC", "two"=>"AAA"}, 
    {"one"=>"AB", "two"=>"BCC"} 
] 

我如何得到以下輸出:

{"one"=>"BC", "two"=>"AAC"} 
    {"one"=>"BA", "two"=>"AAB"} 
    {"one"=>"AC", "two"=>"AAA"} 
    {"one"=>"AC", "two"=>"AAB"} 
    {"one"=>"AB", "two"=>"BCC"} 
    {"one"=>"AA", "two"=>"ABA"} 
    {"one"=>"AA", "two"=>"BBA"} 
    {"one"=>"AA", "two"=>"BCB"} 

我可以做到這一點很容易不夠的,如果這兩個鍵值指向整數:

multi_sort = values.sort_by { |x| [-x["one"], x["two"] ] } 

什麼是語法與字符串值做到這一點?

回答

3

您可能需要寫一個完整的sort方法:

values.sort { |a,b| a["one"] == b["one"] ? a["two"] <=> b["two"] : b["one"] <=> a["one"] } 

注意比較的順序是b VS a爲「一」和a VS b爲「二」。

如果您使用符號鍵而不是字符串,這可能會更簡潔。

+0

我其實將問題提到上面。在我的實際使用案例中,我無法控制它們是符號還是字符串,至少沒有額外的工作。 –