2017-07-03 2 views
0

Gesetzt Ich habe eine KlasseErhalten Maximum von absoluten Werten signierten Wert zurück

Public Class Foo 
    Property fooProp1 as Single 
    Property fooProp2 as Single 
    Property fooProp3 as Single 
End Class 

das absolute Maximum einer Immobilie zu finden in einem Collection(Of Foo) (positive oder negative Werte enthält) ich tun kann:

Collection.Max(Function(x As foo) Math.Abs(x.fooProp1)) 

und es gibt den größeren absoluten Wert OHNE Vorzeichen zurück.

Die Frage ist, wie kann ich tun, um die Zahl mit dem Zeichen zu bekommen?

Vielen Dank im Voraus. RG

Antwort

0

Math.Abs ​​wird immer einen vorzeichenlosen Wert (die tatsächliche Bedeutung von Absolute) zurückgeben.

Um den Wert einer Eigenschaft zu erhalten, müssen Sie sie nur lesen.

a MAX oder MIN erhalten, können Sie Werte vergleichen muss, wie folgt aus:

 dim x as integer = foo.property 
     dim y as integer = last_foo_property (or anything else) 

     Minimum = Math.Min(x,y) 
     Maximum = Math.Max(x,y) 

Aber, wenn versuchen, die unteren und oberen Werte einer Sammlung zu erhalten, können Sie nutzen:

 MaxValue = Collection.Find(Collection, Function(Z) (Z > BiggerValue)) 

     MinValue = Collection.Find(Collection, Function(Z) (Z < LowerValue)) 

wo diese Werte vor dem Anruf erhalten werden.

Eine andere Möglichkeit ist eine Art zu machen und die ersten und die letzten Werte erhalten ...

+0

Danke für die Antwort aber nicht meine Frage beantworten ... Ich habe eine ObservableCollection (Of Foo) und Die Klasse foo hat 4 Requisiten. Ich brauche das absolute Maximum von einer der Requisiten aller foo-Items in der Sammlung. Ich könnte für Ex schaffen. eine Funktion, iterieren und vergleichen, wobei am Ende der Operation mein Wunschwert signiert ist. Oder die Max- und Min-Werte erhalten, dann ihre absoluten Werte vergleichen und die größte zurückgeben, aber ich suchte nach einer eleganteren Lösung, wie in meinem Beispiel ein Inline-Delegierter –

0
Collection.Select(Function(x) a.fooProp1).Aggregate(Function(a, b) 
                If(Math.Abs(a) > Math.Abs(b), a, b)) 
Verwandte Themen