2013-07-06 80 views
0

我正在尋找一種智能方式來將具有相似值(不一定按相同順序)的任意數量的數組分組。我正在使用的語言是紅寶石,但我想這個問題是相當語言不可知的。如何將具有相似值的數組分組

鑑於

a = ['foo', 'bar'] 
b = ['bar', 'foo'] 
c = ['foo', 'bar', 'baz'] 
d = ['what', 'ever', 'else'] 
e = ['foo', 'baz', 'bar'] 

我想有,告訴我一個函數,

  • 一個& b是一組
  • Ç& e爲一組
  • d是它自己的組

我可以想到一些不那麼聰明的做法,效率非常低,就像我可以比較每個數組的值與其他數組的值。 或者我可以檢查是否((a - b)+(b - a))。length == 0爲數組的所有組合,並將結果爲0的組合。或者我可以檢查是否a.sort == b。排序所有數組的組合。

我敢肯定,我之前有人已經更有效地解決了這個問題。我似乎無法找到如何。

回答

2

你可以用sort做到這一點,而不是「對所有數組的組合」,但只對所有數組進行操作(Schwartzian變換)。

arrays = [a, b, c, d, e] 
arrays.group_by{|array| array.sort}.values 
相關問題