Hallo Leute,
ich glaube die PHP-Welt hat mich zu einem bequemen Zottelmonster verwandelt xD
In C# habe ich ab und zu Probleme mit den Datentypen aber hoffentlich habt ihr ja eine lösung für mein jetziges Problem.
Ich würde gerne eine Variable haben die ich mit beliebig vielen Dimensionen bestücken kann, genau so wie in PHP 😄
Die Struktur der Variable sollte so zu realisieren sein:
[pre]Variable
|- Alter
|- Haarfarbe
|- Kleider
|- Hose
|- Grösse
|- Farbe
|- Taschen
|- Uhr
|- Geldbeutel
|- 20€
|- Kreditkarte
|- ID
|- Hemd
|- Grösse
...[/pre]
In PHP kann man es ja ganz einfach so lösen:
$Array = array();
$Array["ich"] = array();
$Array["ich"]["mache"] = array();
$Array["ich"]["mache"]["was"] = array();
$Array["ich"]["mache"]["was"]["ich"] = array();
$Array["ich"]["mache"]["was"]["ich"]["will"] = "und es funktioniert sogar!";
$Array["ich"]["du"] = "er/sie/es";
Hoffentlich kann mir einer Helfen ^^
MfG
C# - Mittelmässig
vb.NET- Fortgeschritten
PHP - Profi
HTML, CSS, JavaScript (jQuery) - Profi
Hallo DatMilu,
um eine Baumstruktur zu realisieren braucht man nur eine eigene Knotenklasse zu schreiben. Wenn diese die Properties Nodes(*) und Value hat, dann kannst du fast genauso zugreifen:
var root = new Node ();
root.Nodes ["ich"] = new Node ();
root.Nodes ["ich"].Nodes ["mache"] = new Node ();
root.Nodes ["ich"].Nodes ["mache"].Nodes ["was"] = new Node ();
root.Nodes ["ich"].Nodes ["mache"].Nodes ["was"].Nodes ["ich"] = new Node ();
root.Nodes ["ich"].Nodes ["mache"].Nodes ["was"].Nodes ["ich"].Nodes ["will"].Value = "und es funktioniert sogar!";
(*) Wenn du über Strings zugreifen willst, dann müsste Nodes vom Typ Dictionary <String, Node> sein. Normal würde man eine List<Node> verwenden.
Bitte beachte vorsorglich [Hinweis] Wie poste ich richtig? Punkt 1.1.1.
herbivore
Wow, das es wirklich so einfach geht, hätte ich nicht gedacht.
Ich entschuldige mich für die Neulings-Frage und versuche solche beim nächsten Mal zu vermeiden.
Wen es Interessiert, hier die Klasse die ich erstellt habe:
class Tree
{
public Dictionary<string, Tree> Nodes= new Dictionary<string, Tree>();
public string Value;
public Tree(string V="")
{
Value = V;
}
}
class App
{
public void Main()
{
Tree T = new Tree();
T.Nodes["Erde"] = new Tree();
T.Nodes["Erde"].Nodes["Lebewesen"] = new Tree("Mensch");
System.Windows.Forms.MessageBox.Show(T.Nodes["Erde"].Nodes["Lebewesen"]); // Gibt Mensch aus.
}
}
Vielleicht wird es Mal einer brauchen 😄
MfG
C# - Mittelmässig
vb.NET- Fortgeschritten
PHP - Profi
HTML, CSS, JavaScript (jQuery) - Profi
Eine kleine Ergänzung:
Du kannst einen eigenen Indexer schreiben, und so die Aufrufe etwas verkürzen:
private class Tree
{
public Dictionary<string, Tree> Trees = new Dictionary<string, Tree>();
public string Value;
public Tree(string V = "")
{
Value = V;
}
public Tree this[string index]
{
get
{
Tree item;
if (Trees.ContainsKey(index)) item = Trees[index];
else
{
Trees.Add(index, item = new Tree());
}
return item;
}
}
}
Dann verkürzt sich der Aufruf auf
var root = new Tree();
root["ich"]["mache"]["was"]["ich"]["will"].Value = "und es funktioniert sogar!";
Wow, danke das macht es mir erheblich leichter 😃
Wusste gar nicht das ich beim Konstruktor einen Indexer erstellen kann.
MfG
Edit: Dieses kleine Script hat mein Programmierverhalten in C# Revolutioniert! Vielen vielen Dank!
C# - Mittelmässig
vb.NET- Fortgeschritten
PHP - Profi
HTML, CSS, JavaScript (jQuery) - Profi
... und dann kannst Du Dir noch überlegen ob den das Property Value dynamisch machst. (dynamic) Das erzeugt Overhead zur Laufzeit aber dann bist Du php-konform.