Pour le OrderBy, tu as affiché ou utilisé les données ?
Car en LINQ, les données sont calculées au moment de l'utilisation, pas avant.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
En fait, tu utilises LINQ, OrderBy est une fonction d'extension.
Concernant le ratio Complexité du code / Vitesse, ça reste convenable.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Bonjour NHenry,
Voici un petit BenchMark en Vb.Net 2008 de procedure de tri par 3 méthodes
Tri effectué sur 1 000 000 éléments
La premiere (Tableau de double) par cette fonction quicksort : 1622 millisecondes
Dim tri() As Double
Quicksort(tri)
Public Sub Quicksort(ByVal t() As Double, Optional ByVal loBound As Integer Integer.MaxValue, Optional ByVal upBound As Integer Integer.MinValue)
' http://www.visionduweb.com/cours/ipi/divers_net/Puissance_VB_Net.htm
' http://faq.vb.free.fr/index.php?question=151
Dim med_value As Double, hi As Integer, lo As Integer, i As Integer
If loBound Integer.MaxValue Then loBound t.GetLowerBound(0)
If upBound Integer.MinValue Then upBound t.GetUpperBound(0)
If loBound >= upBound Then Exit Sub
Dim op As New Random
i = Convert.ToInt32(Int((upBound - loBound + 1) * op.NextDouble + loBound)) 'rnd fourni un aléatoire
med_value t(i) : t(i) t(loBound)
lo loBound : hi upBound
Do
Do While t(hi) >= med_value
hi = hi - 1 : If hi <= lo Then Exit Do
Loop
If hi <= lo Then
t(lo) = med_value : Exit Do
End If
t(lo) t(hi) : lo lo + 1
Do While t(lo) < med_value
lo = lo + 1 : If lo >= hi Then Exit Do
Loop
If lo >= hi Then
lo hi : t(hi) med_value
Exit Do
End If
t(hi) = t(lo)
Loop
Quicksort(t, loBound, lo - 1) ' Recursive calls
Quicksort(t, lo + 1, upBound)
End Sub
La seconde (Liste de double) par la fonction .sort : 140 millisecondes
Dim tri As New List(Of Double)
tri.sort
La troisieme (liste de point) par cette fonction .OrderBy : 15 millisecondes
Dim dict As New List(Of Point)
...
Dim DictTrié As IEnumerable(Of Point) = dict.OrderBy(Function(point) point.X)
Cet essai n'est pas completement rigoureux avec les éléments triés mais il indique des pistes a suivre.
En esperant ne pas avoir fais d'erreur ..
Si quelqu'un fais des essais en ce domaine n'hésitez pas a nous en faire profiter.
Bonne journée CGSI3
Exact NHenry,<
Tu est toujours d un grand secours,
la fonction Linq doit ensuite etre executer par l execution d'une opération quelconque sur la variable dict par exemple l'affichage d'un élément du tableau.
Ce qui ramene ce benchmark pour la methode Orderby a environ 600ms pour cet exemple.
Mais il faut garder a l'esprit que je tri une liste Simple par la methode Sort et des points (2 éléments x et y) pour OrderBy.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bonjour a tous,
Ceci est juste une petite remarque
j'ai posté une fonction QuickSort, il y a 2 ans maintenant, qui fonctionnait sur le site.
Je reviens a ce jour sur ce post pour dire que lorsque j'essai de la récupérer, je m'aperçois que plein de "=" ou de "<>" sont supprimés du code
Est ce moi qui ai mal posté a l'époque ou la migration s'est mal effectuée ? je fini par avoir des doutes ...
Cependant Quicksort comme ceci est largement trop lent,
voici une méthode de tri d'un ArrayList d'Objets possédant la propriété Name. Indiquez moi si vous trouvez mieux.
Public Sub SortByName(byref ArrayList as ArrayList )
Dim dict As New List(Of Object)
dict = ArrayList.ToArray.ToList()
Dim DictTrié As IEnumerable(Of Object) = dict.OrderBy(Function(x) x.name)
ArrayList = New ArrayList(DictTrié.ToArray)
End Sub