2017-05-31 4 views
0

Ich bin ein Neuling bei C# und komme aus einem PHP-Hintergrund, wo multidimensionale Arrays ein Spaziergang im Park sind.Nested SortedList

Wie kann man ein verschachteltes/mehrdimensionales Array mit einer SortedList in C# erstellen? Ich glaube aus dem Lesen, dass die SortedList wahrscheinlich die vergleichbarste PHP-Funktionalität ist. Ich habe das versucht, folgend, aber es wirft Fehler:

SortedList arr = new SortedList(); 
arr.Add("hello",new SortedList()); 
arr.hello.Add("world",new SortedList()); 
+2

Sie möchten wahrscheinlich ein [Wörterbuch] (https://msdn.microsoft.com/en-us/library/xfhwa508 (v = vs.110) .aspx) – FortyTwo

+0

Profi-Tipp: C# ist ein ** statisch typisierte ** Sprache. Ihr Beispiel könnte immer nur mit nicht typisierten Sprachen wie PHP oder JavaScript arbeiten, oder mit * dynamic * –

+1

Datenstrukturen sind ein viel größeres Thema in stark typisierten Sprachen. Wenn Sie Ihre genauen Anforderungen besser kennen, könnten wir Sie in die richtige Richtung führen. Sie sollten fast sicher Generika verwenden. Nicht-generische 'SortedList' haben heutzutage ein bisschen eine milde Dekade. –

Antwort

-1

Eine Klasse

public class MyList 
    { 
     string name { get; set;} 
     List<MyList> children { get; set; } 
    } 

oder

public class MyList 
    { 

     SortedList<string, MyList> children = new SortedList<string, MyList>(); 
    } 
0

Was darüber.

class NestedSortedList<T> : SortedList<T, NestedSortedList<T>> { } 

und -prüfung ..

internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      var nestedSortedList = new NestedSortedList<string>(); 
      nestedSortedList.Add("1", new NestedSortedList<string>()); 
      nestedSortedList.Add("2", new NestedSortedList<string>()); 
      nestedSortedList.Add("3", new NestedSortedList<string>()); 

      nestedSortedList["1"].Add("11", new NestedSortedList<string>()); 
      nestedSortedList["2"].Add("21", new NestedSortedList<string>()); 
      nestedSortedList["2"].Add("22", new NestedSortedList<string>()); 

      foreach (var item in nestedSortedList) 
      { 
       Console.WriteLine(item); 
       foreach (var value in item.Value.Values) 
       { 
        Console.WriteLine(value); 
       } 
       Console.WriteLine(); 
      } 

      Console.ReadLine(); 
     } 
} 

Dies ist die Ausgabe

enter image description here

EDIT >>> Ohne NestedSortedList Klasse

Erstellen können Sie die folgenden versuchen, obwohl Du wirst mit all diesen hässlichen Würfen fertig werden müssen.

internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      var sortedList = new SortedList(); 
      sortedList.Add("1", new SortedList()); 
      sortedList.Add("2", new SortedList()); 
      sortedList.Add("3", new SortedList()); 

      ((SortedList)sortedList["1"]).Add("11", new SortedList()); 
      ((SortedList)sortedList["2"]).Add("21", new SortedList()); 
      ((SortedList)sortedList["2"]).Add("22", new SortedList()); 

      foreach (DictionaryEntry dictionaryEntry in sortedList) 
      { 
       Console.WriteLine("Key: {0}, Value: {1}",dictionaryEntry.Key,dictionaryEntry.Value); 
       foreach (DictionaryEntry innerDictionaryEntry in (SortedList)dictionaryEntry.Value) 
       { 
        Console.WriteLine("Inner >>> Key: {0}, Value: {1}", innerDictionaryEntry.Key, 
         innerDictionaryEntry.Value); 
       } 
       Console.WriteLine(); 
      } 

      Console.ReadLine(); 
     } 
} 

Und die Ausgabe ...

enter image description here

Aber bitte hüten. Da nicht generische SortedList Typ empfängt Objekt als Schlüssel und Wert bedeuten, könnten Sie speichern je nachdem, was Objekt, das Sie wollen, aber Sie werden immer brauchen, um sie richtig gegossen, um sie zu benutzen, als seine ursprüngliche Art beabsichtigt ist,

verwendet werden Hoffe, das hilft

+0

Vielen Dank! Wäre das nicht möglich, ohne zuerst die Nested-Klasse zu erstellen? – UKUser35

+0

Ich habe Antwort bearbeitet, um zu zeigen, wie man es macht, ohne geschachtelte Klasse zu erstellen – taquion

+0

Auch - ich glaube nicht, dass ich Strings sowie Listen hier als zweiter Parameter hinzufügen könnte? – UKUser35