it-swarm.com.de

was ist der Unterschied zwischen Liste <> und Wörterbuch <> in c #

Ich habe merkwürdige Zweifel bezüglich Liste und Wörterbuch in c #

In einer Liste fügen wir Elemente zur Liste hinzu, indem Sie die folgende Methode verwenden

using System.Collections.Generic;

class Program
{
    static void Main()
    {
       List<int> list = new List<int>();
       list.Add(2);
       list.Add(3);
       list.Add(5);
       list.Add(7);
    }
}

In einem Wörterbuch fügen wir solche Elemente hinzu ...

using System;
using System.Collections.Generic;

class Program
{
   static void Main()
   {
      Dictionary<string, int> d = new Dictionary<string, int>();
      d.Add("cat", 2);
      d.Add("dog", 1);
      d.Add("llama", 0);
      d.Add("iguana", -1);
   }
}

Ich weiß nicht genau, was der Unterschied ist, aber in einem Wörterbuch fügen wir Elemente wie ein Paar (Schlüssel, Wert) hinzu, und in einer Liste fügen wir nur Elemente hinzu, ohne einen Schlüssel anzugeben.

Würde jemand das klären?

16
rockyashkumar

IDictionary steht für Schlüssel-> Wertekarten, ICollection für Gruppen ähnlicher Objekte.

ICollection ist eine Schnittstelle für Auflistungen ähnlicher Objekte: die Steuerelemente in einem Formular, die Elemente in einer Liste, die Attribute in einem XML-Tag usw. Ab .NET 2.0 gibt es eine generische Version, sodass Sie auf eine Auflistung ganzer Zahlen als ICollection<int> verweisen können.

IDictionary ist eine Schnittstelle, um einen Objekttyp oder einen Wert einem anderen zuzuordnen. Es funktioniert wie ein echtes Wörterbuch oder ein Telefonbuch: Sie haben einen "Schlüssel" wie den Namen einer Person, und wenn Sie nachschlagen, erhalten Sie einige Informationen, die durch diese Taste identifiziert werden, beispielsweise eine Adresse oder Telefonnummer. Jeder Schlüssel kann nur einmal aufgeführt werden, obwohl zwei verschiedene Schlüssel immer noch denselben Wert haben dürfen. Dies ist auch in .NET 2.0 allgemein, sodass ein Wörterbuch, dessen Schlüssel Zeichenfolgen sind und dessen Werte Ganzzahlen sind, IDictionary<string,int> wäre.

Ein Wörterbuch ist eigentlich eine Sammlung von Schlüssel/Wert-Paaren: Sie können einen IDictionary<int,string> als ICollection<KeyValuePair<int,string>> verwenden, und Sie können auf die Schlüssel und Werte als separate Auflistungen mit den Eigenschaften Keys and Values ​​zugreifen.

Sowohl ICollection als auch IDictionary sind ungeordnet, was bedeutet, dass Sie zwar die Elemente in einer bestimmten Reihenfolge mit der CopyTo-Methode oder einer foreach-Schleife abrufen können, diese Reihenfolge jedoch keine besondere Bedeutung hat und sich ohne erkennbaren Grund ändern kann. Das ist der Hauptunterschied zwischen ICollection und IList: Mit einer Liste können Sie Elemente an bestimmte Positionen setzen, genau wie ein Array, und sie bleiben dort, bis Sie sie verschieben.

30
SShebly

List<> und Dictionary<,> - ziemlich unterschiedliche Datenstrukturen, die für unterschiedliche Zwecke verwendet werden. List ist einfach eine Menge von Elementen und Dictionary ist eine Menge von Schlüssel-Wert-Paaren.

Das Wörterbuch ist sehr nützlich, wenn Sie eine Reihe komplexer Objekte haben und einen schnellen Zugriff wünschen, indem Sie beispielsweise ObjectName/ObjectId angeben. In diesem Fall erstellen Sie IDictionary<string, TObject>, wobei der Schlüssel ObjectId und der Wert Value selbst ein Objekt wäre.

Einige Unterschiede:

  • Listet die Reihenfolge der Elemente auf, Wörterbuch nicht
  • Liste erlaubt schnellen Zugriff durch Index
  • In QuickSort-Algorithmus integrierte Listenunterstützung für die schnelle Datensortierung
  • Das Wörterbuch ermöglicht es der Zeitkomplexität ~ O(1), über ein Schlüssel auf ein Element (einen Wert) zuzugreifen
10
sll
  • Dictionary<K,V> ist ein assoziatives Array oder eine Map. Es ist ein Container, der mit Werten eines beliebigen Typs indiziert werden kann.
  • List<T> ist ein ganzzahlig indiziertes Array. Es ist ein Container, der durch zusammenhängende Ganzzahlen indiziert wird.

Der wesentliche Unterschied besteht daher darin, wie die Container indiziert werden.

Treten Sie nicht in die Falle, zu glauben, dass Dictionary<int,T> semantisch äquivalent zu List<T> ist. Der Unterschied ist, dass die Indizierung von List<T> fortlaufend ist, während bei der Indizierung für Dictionary<int,T> Lücken vorhanden sein kann.

6
David Heffernan

Ich habe eine Klassenbibliothek, die auf eine Vielzahl von T-sql-Sprocs zugreift. Jeder Sproc gibt eine einzelne Zeile mit unterschiedlichen Spalten zurück. Ich brauchte eine Allzwecklösung für das Abrufen der Werte, und Dictionary <> bot eine wesentlich sauberere Lösung als List <>.

Die Klasse, die allen Umhüllungen gemeinsam ist, gibt an

public Dictionary<string, String> datadict = new Dictionary<string, string>();

und

public Dictionary<string, String> LoadData(string sproc, string paramName, string paramValue)

Beim Aufruf eines Readers wird der Datadict mit geladen 

for (int i = Reader.FieldCount; i != 0; i--)
 {
  datadict.Add(Reader.GetName(i - 1).Trim(), Reader.GetString(i - 1).Trim());
 }

und gibt datadict an die aufrufende Klasse zurück, die die Daten dann ähnlich wie bei Reader abrufen kann; Z.B.:

datadict = myData.LoadData("spGetSSN", "", "");
  ssn1 = datadict["SSN1"];
  ssn2 = datadict["SSN2"];
  ssn3 = datadict["SSN3"];

Viel sauberer für mich diese Liste <>.

0
john rains