ルーピングこの特定の並べ替え/並べ替えの質問については、Rubyで助けを得ることができます。RubyでTSortを使用して配列の並べ替えと並べ替え
そうように私は、配列の配列を持っている:各アレイ内の
[['b', 'f'],
['f', 'h'],
['a', 'e'],
['b', 'c'],
['b', 'd'],
['e', 'g'],
['c', 'f'],
['d', 'f'],
['f', 'g'],
['g', 'h']]
2番目の要素は最初の後に発生しなければならないので、私はその配列にそれらをソートしますプログラムを書きたいです以下のようになります。私が使用しようとしている
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
RubyのTSort
ライブラリに組み込まれており、私もthis stack overflow postから働いています。
だから私はこれをやっている:
class Hash
include TSort
alias tsort_each_node each_key
def tsort_each_child(node, &block)
fetch(node).each(&block)
end
end
def flex_sort(arr)
stuff = arr.map do |head, *tail|
{head => tail}
end
stuff.reduce(&:merge).tsort.reverse
end
sorted = flex_sort(flex)
は、私はこれについていくつか質問があります。まず、私は正しい道を歩いていますか?第2に、このコードを実行すると、最初の配列'h'
の配列が配列の最初の配列に含まれていないことがわかります。したがって、それらをハッシュに変換して.tsort
を実行しようとすると、key 'h' does not exist
、私はそれが壊れないように配列の配列に['h']
を入れるように強制します。これを回避する方法はありますか?
あなたの質問は分かりません。あなたの例が要素をアルファベット順にソートしなかった場合は、より明確になります。あなたは '' [[a '、' b ']、[' b '、' c ']、[' c '、' a ']] 'はないと仮定していますか? –