group_by
ダブレットのグループを作成するために使用できます。
array.group_by {|v| v[8] }
これにより、 のハッシュが得られます{"group key" => ["group", "members"]}
。
すべてのダブレットのリストを取得するには、複数のメンバーを持つグループを選択するだけです:
array.group_by {|v| v[8] }.values.select {|g| g.length > 1 }
さらに、リストからダブレットを削除するには:
array.group_by {|v| v[8] }.values.map(&:first)
これにより、ダブレットが削除された新しい配列が返されるため、特定のダブレットの最初のアイテムのみが返されます。
array = [
%w(1 2 3 4 5 6 7 8 9),
%w(1 2 3 4 5 6 7 8 9),
%w(a b d e f g h i j),
%w(a b d e f g h i j),
%w(j k l m n o p q r)
]
pp array.group_by {|v| v[8] }.values.map(&:first)
# Output:
# [["1", "2", "3", "4", "5", "6", "7", "8", "9"],
# ["a", "b", "d", "e", "f", "g", "h", "i", "j"],
# ["j", "k", "l", "m", "n", "o", "p", "q", "r"]]