2013-06-14 3 views
8

ich finden müssen, wenn der String in einer Liste vorhanden sind Duplikate zu vermeiden fügt: Hier ist Beispiel von Website Microsoft:wie in List <string> in C# Exist verwenden

using System; 
using System.Collections.Generic; 

public class Example 
{ 
    public static void Main() 
    { 
     List<string> dinosaurs = new List<string>(); 

     dinosaurs.Add("Compsognathus"); 
     dinosaurs.Add("Amargasaurus"); 
     dinosaurs.Add("Oviraptor"); 
     dinosaurs.Add("Velociraptor"); 
     dinosaurs.Add("Deinonychus"); 
     dinosaurs.Add("Dilophosaurus"); 
     dinosaurs.Add("Gallimimus"); 
     dinosaurs.Add("Triceratops"); 

     Console.WriteLine(); 
     foreach(string dinosaur in dinosaurs) 
     { 
      Console.WriteLine(dinosaur); 
     } 

     Console.WriteLine("\nTrueForAll(EndsWithSaurus): {0}", 
      dinosaurs.TrueForAll(EndsWithSaurus)); 

     Console.WriteLine("\nFind(EndsWithSaurus): {0}", 
      dinosaurs.Find(EndsWithSaurus)); 

     Console.WriteLine("\nFindLast(EndsWithSaurus): {0}", 
      dinosaurs.FindLast(EndsWithSaurus)); 

     Console.WriteLine("\nFindAll(EndsWithSaurus):"); 
     List<string> sublist = dinosaurs.FindAll(EndsWithSaurus); 

     foreach(string dinosaur in sublist) 
     { 
      Console.WriteLine(dinosaur); 
     } 

     Console.WriteLine(
      "\n{0} elements removed by RemoveAll(EndsWithSaurus).", 
      dinosaurs.RemoveAll(EndsWithSaurus)); 

     Console.WriteLine("\nList now contains:"); 
     foreach(string dinosaur in dinosaurs) 
     { 
      Console.WriteLine(dinosaur); 
     } 

     Console.WriteLine("\nExists(EndsWithSaurus): {0}", 
      dinosaurs.Exists(EndsWithSaurus)); 
    } 

    // Search predicate returns true if a string ends in "saurus". 
    private static bool EndsWithSaurus(String s) 
    { 
     return s.ToLower().EndsWith("saurus"); 
    } 
} 

Ist es möglich, EndsWithSaurus Funktion zu ersetzen Lambda-Ausdruck? Vielen Dank für Ihre Eingabe! Hier ist ein Arbeitscode:

 if (dinosaurs.Any(e => e.EndsWith("saurus"))) 
      Console.WriteLine("saurus exists"); 

     if (dinosaurs.Exists(e => e.EndsWith("saurus"))) 
      Console.WriteLine("saurus exists"); 
+2

Zwei Bemerkungen für Ihren Ersatz: 1) zu vergleichen, verwenden Sie '==' statt '=', die zuweist; 2) Wenn die Methode bereits True zurückgibt, müssen Sie diesen Wert nicht erneut vergleichen. –

+0

Wenn Sie ** nur ** auf Existenz prüfen möchten, kann ein 'HashSet ' Wert haben, notieren Sie –

+0

Sie erkennen, dass Ihre zwei Lösungen funktional gleichwertig sind, richtig? –

Antwort

14

Try this:

if (dinosaurs.Exists(e => e.EndsWith("saurus"))) 
     Console.WriteLine("saurus exists"); 

Die Antwort mit Any() arbeitet auch in Ordnung. Der Unterschied ist nur die Exists() Methode von List<T> selbst kommt und die Any() ist nur eine der großen Erweiterungsmethoden Linq (und using System.Linq erfordert)

14

Verwendung Any:

if (dinosaurs.Any(e => e.EndsWith("saurus"))) 
     Console.WriteLine("saurus exists"); 

Sie konnte Verwendung List.Exists() nur durch Ihre Lambda-Wechsel:

if (dinosaurs.Exists(e => e.EndsWith("saurus")) // == true is implied 
     Console.WriteLine("saurus exists"); 

aber Any ist mehr tragbar (dh kann mit beliebig aufzählbar sein, nicht nur List s.

+2

muss 'using System.Linq' hinzufügen – juharr

+1

@Sevenate Kein Problem - Ihr funktioniert, auch - Ich habe' Any' für so lange verwendet habe ich vergessen, dass 'List.Exists()' sogar existiert. –

+0

@DStanley stimmen zu, es ist heutzutage selten. – Sevenate

Verwandte Themen