none
Prüfen ob Listeninhalte alle identisch sind RRS feed

  • Frage

  • public double GetMinAmplitude()

    { if(!Connected) return 0.0; List<double> minAmplitudes = new List<double>(); foreach(Channel ch in m_GroupedChannels) { Channel Chann = ch as Channel; if(Chann != null) minAmplitudes.Add(Chann.GetMinAmplitude()); // minimale Amplitude des Channels hinzufügen } /* Hier an dieser Stelle möchte ich nun die Liste minAmplitudes prüfen, ob alle Werte identisch sind. Wenn ja dann soll dieser Wert zurückgegeben werden. Sind die Werte unterschiedlich, soll double.NaN zurückgegeben werden.*/ } }


    Hallo zusammen,

    ich habe eine Liste m_grouped Channels die verschiedene Typen enthält. Nun möchte ich dieses Liste durchlaufen und überprüfen

    ob in dieser Liste ein Channel vorhanden ist vom Typ Channel. Ist einer vorhanden, so soll für diesen die minimal mögliche Ausgangsamplitude abgefragt werden

    und dann in die Liste minAmplitudes eingetragen werden. Mein Wunsch ist nun herauszufinden ob die Werte in minAmplitudes alle gleich sind:

    z.B. 2,2,2 -> gib 2 zurück

    z.B. 2,3,4 -> gib double.NaN zurück

    Gibt es für Listen einen einfachen Befehl mit dem ich das in einer Codezeile machen kann?

    Bzw. muss/soll ich hier das überhaupt mit einer Liste machen?!

    Vielen Dank im Voraus und viele Grüße


    • Bearbeitet patsyct Montag, 18. November 2013 07:53
    Samstag, 16. November 2013 10:37

Antworten

  • Hallo,

    ich habe das ganze nun mit list.TrueForAll gelöst. Ich prüfe nun ob alle Elemente der Liste mit dem ersten Listenelement übereinstimmen. Falls nicht, dann gib NaN zurück.

    List <double> amplitudes = new List<double>();
    
    amplitudes.Add(x);
    
    amplitudes.Add(y);
    
    amplitudes.Add(z);
    
    if(amplitudes.TrueForAll(val=> val == amplitudes[0] ))
      return amplitudes[0];
    else
     return double.NaN
    


    • Als Antwort markiert patsyct Dienstag, 19. November 2013 19:31
    Dienstag, 19. November 2013 19:31

Alle Antworten

  • Hi,

    ich würde einfach eine Methode schreiben, die in etwa diesen Inhalt hat.

    if( minAmplitudes.Distinct().Count() == 1 ) {
        return 2;
    } else {
        return Double.NaN;
    }

    List<T>.Distinct gibt die eindeutigen Elemente zurück. Wenn Count = 1 ist, gab es nur gleiche Werte, ansonsten gab es mind. einen Unterschied. Siehe dazu auch:

      http://msdn.microsoft.com/de-de/library/vstudio/bb348436.aspx




    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert patsyct Sonntag, 17. November 2013 11:25
    • Tag als Antwort aufgehoben patsyct Montag, 18. November 2013 07:53
    Samstag, 16. November 2013 11:27
    Moderator
  • Gibt es auch noch eine andere Variante, zB mit einer Schleife zu arbeiten? Kann in meinem Projekt Linq nicht als namespace hinzufügen.

    Danke!

    Montag, 18. November 2013 07:53
  • Hallo,

    natürlich kann man das auch "von Hand" codieren:

            public static double ListValuesAreEqual(List<double> list)
            {
                if (list != null && list.Count > 0)
                {
                    double value = list[0];
                    for (int index = 1; index < list.Count; index++)
                        if (list[index] != value)
                            return double.NaN;
                    return value;
                }
                return 0.0; // oder auch NaN
            }

    wobei man LINQ ab .NET 3.5 zur Verfügung hat, und darunter sollte man nichts mehr programmieren.

    Gruß Elmar

    Montag, 18. November 2013 09:34
    Beantworter
  • Kann in meinem Projekt Linq nicht als namespace hinzufügen.

    Wenn Du nicht gerade eine uralte .NET Version verwendest, kann ich mir das nicht vorstellen. Poste doch mal die genaue und vollständige Fehlermeldung.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 18. November 2013 10:06
    Moderator
  • Hallo,

    ich habe das ganze nun mit list.TrueForAll gelöst. Ich prüfe nun ob alle Elemente der Liste mit dem ersten Listenelement übereinstimmen. Falls nicht, dann gib NaN zurück.

    List <double> amplitudes = new List<double>();
    
    amplitudes.Add(x);
    
    amplitudes.Add(y);
    
    amplitudes.Add(z);
    
    if(amplitudes.TrueForAll(val=> val == amplitudes[0] ))
      return amplitudes[0];
    else
     return double.NaN
    


    • Als Antwort markiert patsyct Dienstag, 19. November 2013 19:31
    Dienstag, 19. November 2013 19:31