Dictionaries per 'append' verknüpfen
26. April 2010
Legen wir die folgenden drei Dictionaries für unser Beispiel an:
Nun wollen wir die einzelnen Dictionaries per dict append mit einander verknüpfen. Und zwar so, dass wir folgende (verschachtelte) Struktur erhalten:
D.h., md3 soll an md2 angehängt werden und dies dann wiederrum an md1. Dies erreicht man z.B. so:
Man beachte die Reihenfolge!
Falsch wäre folgende Vorgehensweise:
Warum? Tcl hätte statt des Ausdrucks [dict get $md1 1] gern eine Dictionary-Variable, die das Ergebnis dann auch dauerhaft behält.
Bestimmt gibt es auch eine Möglichkeit, dies auch in der gedanklich "richtigen" Reihenfolge zu bewerkstelligen, d.h. erweitere Key[1] von md1 um md2 und dann Key[1][2] um md3. Aber ich vermute, dass der Aufwand hier den Nutzen übersteigt und bevorzuge daher weiterhin die zuerst gezeigte Vorgehensweise (Variante 1).
set md1 [dict create 1 {descr "dict 1"}]
set md2 [dict create 2 {descr "dict 2"}]
set md3 [dict create 3 {descr "dict 3"}]
Nun wollen wir die einzelnen Dictionaries per dict append mit einander verknüpfen. Und zwar so, dass wir folgende (verschachtelte) Struktur erhalten:
1 {descr "dict 1" 2 {descr "dict 2" 3 {descr "dict 3"}}}
D.h., md3 soll an md2 angehängt werden und dies dann wiederrum an md1. Dies erreicht man z.B. so:
# Variante 1
#
dict append md2 2 " $md3"
dict append md1 1 " $md2"
Man beachte die Reihenfolge!
Falsch wäre folgende Vorgehensweise:
# Variante 2
#
dict append md1 1 " $md2" ;# liefert noch das richtige Ergebnis
dict append [dict get $md1 1] 2 " $md3" ;# hier geht's schief!
Warum? Tcl hätte statt des Ausdrucks [dict get $md1 1] gern eine Dictionary-Variable, die das Ergebnis dann auch dauerhaft behält.
Bestimmt gibt es auch eine Möglichkeit, dies auch in der gedanklich "richtigen" Reihenfolge zu bewerkstelligen, d.h. erweitere Key[1] von md1 um md2 und dann Key[1][2] um md3. Aber ich vermute, dass der Aufwand hier den Nutzen übersteigt und bevorzuge daher weiterhin die zuerst gezeigte Vorgehensweise (Variante 1).
Hast Du etwas dazu zu sagen? Dann tu's doch!
HILFE
Code-Beispiele werden mit den BBCodes [code][/code] dargestellt.
Jedes Tag muss eine Zeile für sich allein haben, d.h der Beispiel-Code
muss wirklich ZWISCHEN den Tags stehen. Beispiel:
Alles was zwischen den beiden Tags [register] und [/register] eingetragen wird, ist nur für registrierte (und eingeloggte) User sichtbar.
[code] ACHTUNG! HIER UMBRUCH WICHTIG. TAG [code] MUSS ALLEIN STEHEN
#include <stdio.h>
int main( void ){
return 0;
} ACHTUNG! HIER UMBRUCH WICHTIG. NACHFOLGENDES TAG [/code] MUSS ALLEIN STEHEN
[/code]Alles was zwischen den beiden Tags [register] und [/register] eingetragen wird, ist nur für registrierte (und eingeloggte) User sichtbar.
Dein Name *
Deine Email
Deine Website
Vorschau