2008-10-30 5 views
1

Étant donné une liste générique d'objets contenant une variable membre qui est une chaîne, quel est le meilleur moyen d'obtenir l'objet contenant la chaîne la plus longue?Récupérer un objet ayant une variable membre avec la longueur de chaîne la plus longue

ie. en supposant val1 est la chaîne je compare:

0 : { val1 = "a" } 
1 : { val1 = "aa" } 
2 : { val1 = "aba" } 
3 : { val1 = "c" } 

ce qui doit être retourné est l'objet 2 parce que « aba » a la plus grande longueur.

Répondre

2

Désolé, je réessayerai. Vous pouvez utiliser l'agrégation suivante:

Dim result = elements.Aggregate(Function(a, b) If(a.val1.Length > b.val1.Length, a, b)) 
+0

IIF pourrait avoir besoin, mais qui ressemble à ça va marcher –

+0

Non, j'utilisé 'Si 'à dessein! Essayez-le, cette construction est nouvelle à VB 9. 'IIf' est maintenant obsolète. –

+0

Je prends ça en arrière, pas besoin d'IIF, ça a marché :) –

0

Vous pouvez également utiliser une commande par:

var x = myStringArray.OrderBy(s => s.Length).Last(); 
+0

'OrderBy' a l'inconvénient d'être plus lent car le tri prend au moins O (n logn). –

+0

oui, c'est ce que j'ai d'abord pensé, cette question m'a été posée par un collègue. –

0
Dim longestLength = elements.Max(Function(el) el.val1.Length) 
Dim longest = elements.First(Function(el) el.val1.Length = longestLength)