親の上を歩いて子を並べ替える階層オブジェクトがあります。これは機能します。しかし今、私はオプションで階層を壊し、新しい仮想拘束を作成する必要があります。
これを説明するために、 x人の妻を持つ男性の例を見てみましょう。それぞれの妻と一緒に、彼にはy人の子供がいます。子供を妻ごとに、または妻を男性ごとに並べ替えることができます。
Man01 Wife01a Kid01aA
Kid01aB
Wife01b Kid01bC
Kid01bD
Man02 Wife02c Kid02cE
Kid02cF
Wife02d Kid02dG
Kid02dH
それらに名前を付けましょう:
Murphy Winnie Kurt
Kara
Wendy Klaus
Klea
Marley Wonda Kasper
Kyra
Wilma Kevin
Karla
そして、それらを親の中でアルファベット順にソートすることを考えてください。
Marley Wilma Karla
Kevin
Wonda Kasper
Kyra
Murphy Wendy Klaus
Klea
Winnie Kara
Kurt
しかし今、私たちは男性に属する子供、または一般的に妻、または一般的に子供を分類できるようにしたいですか?
Marley Wilma Karla
Wonda Kasper
Wilma Kevin
Wonda Kyra
Murphy Winnie Kara
Wendy Klaus
Wendy Klea
Winnie Kurt
これは非常に単純化された架空のオブジェクトです。実際には、アルファベット順に並べ替える代わりに、多くの多くのプロパティに対して複数列の並べ替えを行います。
結果をテーブルに出力することは問題ありませんが、処理自体にはすでに多くの時間とメモリが必要です。これ以上複雑にしたくありません。
それが問題ではない場合は、オブジェクトを配列内のテーブルとしてフラット化し、すべての複数列の並べ替えをスーパー複数列の並べ替えにチェーンし、ループがそのまま残っている最も近い共通の祖先から再グループ化します。
しかし、私は、オブジェクトを本格的なテーブル配列に変換することなく、より効率的な方法でこれを解決しようとしています。
- どうすればこれをタックルできますか?実際にそれらのすべてを2回ループしますか?
- おそらく、私がまだ知らないこの種のソートのための「よく知られた」解決策がありますか?
- たぶん、すべての「仮想」親の参照を使用してテーブルのようなレコードを作成し、後でこれらの参照をループせずに階層にグループ化するウィザードを利用できますか?
これが私が参照している種類のオブジェクトの例です。つまり、オブジェクトには複数のメンバーがある場合、オブジェクトの配列が含まれていますが、Object
文字通りです。{}
[]
{}
{
"men" : [
{
"name" : "Murphy",
// a lot of properties
"wifes" : [
{
"name" : "Winnie",
// a lot of properties
"kids" : [
{
"name" : "Kurt",
// a lot of properties
}, {}, {} // etc...
]
}, {}, {} // etc...
]
}, {}, {} // etc...
]
}
この場合、男性、妻、子供はすべて人間であるため、私の例は間違っていることに注意してください。しかし実際には、異なるプロパティを持つ異なるオブジェクトがあります。複数の宇宙があると仮定して、私は宇宙、惑星、土壌などを選ぶべきでした。;)