BurnerR
Bot #0384479
- Registriert
- 20 Juli 2013
- Beiträge
- 5.509
Irgendwie stehe ich auf dem Schlauch gerade.
Ich baue mir aus Listen nach gewissen einfachen Regeln Pfade bzw. einen Graphen. Also keinen Graphen im visuellen Sinne, aber man könnte es als Graphen (DAG) darstellen, wenn man wollte. So sehen die Listen aus, die ich als Input habe:
[src=yaml]
name: A1
name_specs:
- B1
- C1
kind:
- D:
- E
- F
- G:
- H
property1:
- x
- y
property2:
- z
[/src]
Ich baue mir daraus einen Haufen materialized paths. Dabei ist 'name' die erste Ebene, 'name_specs' die zweite, 'kind' die dritte und vierte. Das sieht dann so aus:
[src=ruby]
/A1/B1/D/E/
/A1/B1/D/F/
[...]
[/src]
Diese haben dann m:n Verbindungen zu den properties.
Die Listen sind so zu lesen, dass ich alle Pfadvarianten auspräge, welche die Liste ermöglicht. Man könnte das vllt so schreiben:
[src=ruby]
/A1/{B1,C1}/D/{E,F}
/A1/{B1,C1}/G/H
[/src]
D.h. aus der Liste ganz oben würden jetzt 4+2 = 6 Pfade entstehen. Jeder dieser Pfade bekommt dann die zugehörigen Verbindungen zu den aufgeführten properties. Natürlich gibt es noch mehr Listen mit meistens anderen Pfaden und auch anderen Kombinationen an properties und natürlich mehr 'names' etc. Die realen Einträge sind natürlich auch länger und es gibt mehr als 3 Properties.
Ziel Aus den generierten Pfaden wieder die Listen generieren.
Erste Frage die sich mir stellt: Unten oder oben anfangen? Ich habe jetzt Erstmal 'oben' an der Wurzel angefangen.
Mein Ansatz war jeweils pro Ebene zu gruppieren:
[src=ruby]
Names.all.group_by{name_specs}
[/src]
Daraus kriege ich dann Dictionaries/Hashtables mit jeweils einer Menge an name_specs als Schlüssel und den passenden name als Werten. also sowas wie das hier:
[src=ruby]]
{
{B1,C1} => {A1}
{B1, C2} => {A2}
}
[/src]
A2, B2, C2 sind hypothetische Einträge aus anderen Listen.
Das wollte ich jetzt ebene für Ebene runter gehen immer gruppieren und dann am Ende die Liste bauen.
* Was haltet ihr davon? Geht das so überhaupt?
* Geht es anders vielleicht besser? Ich finde diese "/A/{B,C}/D/{E,F}" Darstellung höchst ansprechend, aber mir will einfach nicht kommen, wie ich die generiere.
Ich baue mir aus Listen nach gewissen einfachen Regeln Pfade bzw. einen Graphen. Also keinen Graphen im visuellen Sinne, aber man könnte es als Graphen (DAG) darstellen, wenn man wollte. So sehen die Listen aus, die ich als Input habe:
[src=yaml]
name: A1
name_specs:
- B1
- C1
kind:
- D:
- E
- F
- G:
- H
property1:
- x
- y
property2:
- z
[/src]
Ich baue mir daraus einen Haufen materialized paths. Dabei ist 'name' die erste Ebene, 'name_specs' die zweite, 'kind' die dritte und vierte. Das sieht dann so aus:
[src=ruby]
/A1/B1/D/E/
/A1/B1/D/F/
[...]
[/src]
Diese haben dann m:n Verbindungen zu den properties.
Die Listen sind so zu lesen, dass ich alle Pfadvarianten auspräge, welche die Liste ermöglicht. Man könnte das vllt so schreiben:
[src=ruby]
/A1/{B1,C1}/D/{E,F}
/A1/{B1,C1}/G/H
[/src]
D.h. aus der Liste ganz oben würden jetzt 4+2 = 6 Pfade entstehen. Jeder dieser Pfade bekommt dann die zugehörigen Verbindungen zu den aufgeführten properties. Natürlich gibt es noch mehr Listen mit meistens anderen Pfaden und auch anderen Kombinationen an properties und natürlich mehr 'names' etc. Die realen Einträge sind natürlich auch länger und es gibt mehr als 3 Properties.
Ziel Aus den generierten Pfaden wieder die Listen generieren.
Erste Frage die sich mir stellt: Unten oder oben anfangen? Ich habe jetzt Erstmal 'oben' an der Wurzel angefangen.
Mein Ansatz war jeweils pro Ebene zu gruppieren:
[src=ruby]
Names.all.group_by{name_specs}
[/src]
Daraus kriege ich dann Dictionaries/Hashtables mit jeweils einer Menge an name_specs als Schlüssel und den passenden name als Werten. also sowas wie das hier:
[src=ruby]]
{
{B1,C1} => {A1}
{B1, C2} => {A2}
}
[/src]
A2, B2, C2 sind hypothetische Einträge aus anderen Listen.
Das wollte ich jetzt ebene für Ebene runter gehen immer gruppieren und dann am Ende die Liste bauen.
* Was haltet ihr davon? Geht das so überhaupt?
* Geht es anders vielleicht besser? Ich finde diese "/A/{B,C}/D/{E,F}" Darstellung höchst ansprechend, aber mir will einfach nicht kommen, wie ich die generiere.