0
ルービーで、特定のメトリックを使用して配列をグループ化する方法はありますか?私は方法があることを知っていますEnumerable#group_by
。残念ながら、私はそれに1つの議論しか与えることができません。2つの引数でグループ化します。メトリックによるグループ化 - 「近い」項目
items.group_by do |x,y|
some_metric(x,y) < 1.23 # the two items are 'close'
end
このようなものに対処するにはどうすればいいですか?
[['a', 'b'],
['c', 'd'],
['e','f'],
['a', 'b', 'c'],
['c', 'd', 'z'],
['a', 'b', 'k']]
そして、私は2つの配列が同じであるか私に語ったメトリックを持っている:
は、私はアイテムを持って言うことができます。 ['a','b']
と['a', 'b', 'c']
の配列は、['a', 'b']
と['e', 'f']
よりはるかに近いはずです。 だから、理想的な出力は次のようなものになるだろう:あなたは完全にgroup_by
にブロックを渡すことによってそれを行うことができます
[
[['a', 'b'], ['a', 'b', 'c'], ['a', 'b', 'k'],
[['c', 'd'], ['c', 'd', 'z']],
[['e','f']]
]
input/some_metric/outputの具体例を挙げることができますか?あなたが求めている行動がはっきりしていません。 – user12341234
'items = [1,2,3]'とします。あなたの例でメトリックを使用するとき、どのようにグループ分けしたいのですか? ( "sth"は文字通りではなく、文字通りのためのものです)。 –
コメントありがとう!私は入出力を提供しています。しかし、今私はもっと多くのことを考えています...私は銃を飛ばしたと思います。なぜなら、1ライナーの解決策があるとは思わないからです。私はルビに何とか比較する鍵が何であるかを伝える必要があります。私の場合、それはちょうどどんな要素でもあり得る。コレクションに一致するすべてのアイテムを取得してから削除し、再度ループします。 1つの要素を取る - >一致するすべての項目など... – NickyNick