如何对具有相似值的数组进行分组

时间:2013-07-06 15:07:00

标签: ruby arrays sorting grouping

我正在寻找一种智能的方法来将具有相似值的任意数量的数组分组(不一定按相同的顺序)。我使用的语言是红宝石,但我猜这个问题与语言无关。

鉴于

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

我想要一个告诉我

的功能
  • a& b属于一个群体
  • c& e属于一个群体
  • d是它自己的小组

我可以想到一些不那么聪明的方法来做这个非常低效的方法,比如我可以将每个数组的值与每个其他数组的值进行比较。 或者我可以检查((a - b)+(b - a))。length == 0对于所有数组的组合,并将那些结果分组。或者我可以检查是否a.sort == b.sort对于所有阵列组合。

我确信在我之前有人能更有效地解决这个问题。我似乎无法找到如何。

1 个答案:

答案 0 :(得分:2)

对于所有数组组合,你可以使用sort而不执行此操作“但只对所有数组执行(Schwartzian变换)。

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