2010-12-30 6 views
0

Ich habe eine Arraylist mit wenigen doppelten Elementen. Ich muss die Anzahl jedes duplizierten Artikels wissen. Ich benutze 2.0 so kann linq nicht benutzen.Suchen Sie doppelte Werte in einer Arraylist ohne Verwendung von LINQ

Ich hatte eine ähnliche Frage früher gestellt, aber meine Frage war nicht klar. Dank Prady

+0

Warum Sie es C# -3.0 Tag haben, wenn Sie 2.0 verwenden? – Crispy

+0

Entschuldigung, ich habe es geändert und Sie haben es kommentiert – Prady

+0

Warum würden Sie ArrayList in 2.0 verwenden? – cdhowie

Antwort

1

Ich habe etwas in der Vergangenheit getan. Meine Lösung bestand darin, die ArrayList zu durchlaufen und die Zählerstände in einem Wörterbuch zu speichern. Dann Schleife obwohl das Wörterbuch um die Ergebnisse anzuzeigen:

 ArrayList list = new ArrayList(); 
     list.Add(1); 
     list.Add("test"); 
     list.Add("test"); 
     list.Add("test"); 
     list.Add(2); 
     list.Add(3); 
     list.Add(2); 

     Dictionary<Object, int> itemCount = new Dictionary<object, int>(); 

     foreach (object o in list) 
     { 
      if (itemCount.ContainsKey(o)) 
       itemCount[o]++; 
      else 
       itemCount.Add(o, 1); 
     } 

     foreach (KeyValuePair<Object, int> item in itemCount) 
     { 
      if (item.Value > 1) 
       Console.WriteLine(item.Key + " count: " + item.Value); 
     } 

Ausgang:

test count: 3 
2 count: 2 

bearbeiten Realisiert ich das Schlüsselwort var verwendet, die kein 2.0 Funktion. Ersetzt es durch KeyValuePair.

+0

Danke Chris ... nur eine Frage ... gibt es eine Möglichkeit, das Nein der Zählungen kennenzulernen, wenn ich den Schlüsselwert kenne. Zum Beispiel möchte ich die Anzahl der Tests wissen, mit etwas wie find (test) wird 3 – Prady

+0

Yup. Verwenden Sie den obigen Code. Wenn Sie die Anzahl von 2 wissen wollten, würden Sie etwas wie 'int count = itemCount [2]' tun. – Crispy

0

Option 1: Sortieren Sie die Liste und dann nebeneinander Gleiche Elemente zählen (erfordert, dass Sie die Equals-Methode für Ihre Klasse außer Kraft zu setzen)

Option 2: Verwenden Sie Ihre eindeutige Kennung (aber Sie Definieren Sie zwei Objekte als gleichwertig, als Schlüssel für ein Dictionary und fügen Sie jedes Ihrer Objekte diesem Eintrag hinzu.

0

ich brauchte etwas ähnliches für ein Projekt vor langer Zeit, und machte eine Funktion für sie

static Dictionary<object, int> GetDuplicates(ArrayList list, out ArrayList uniqueList) 
    { 
     uniqueList = new ArrayList(); 
     Dictionary<object, int> dups = new Dictionary<object, int>(); 
     foreach (object o in list) 
     { 
      if (uniqueList.Contains(o)) 
       if (!dups.ContainsKey(o)) 
        dups.Add(o, 2); 
       else 
        dups[o]++; 
      else 
       uniqueList.Add(o); 
     } 
     return dups; 
    } 
Verwandte Themen