Bonsoir a tous, je ne sais pas trop je peux faire ce genre de demande sur le site mais je bute sur un problème que je n'arrive pas a résoudre.
J'ai une liste de valeurs dans le désordre et je doit trouver la valeur la plus proche d'une valeur cible ainsi que la valeur suivante.
J'ai déjà trouvé pour la valeur la plus proche mais je bloque pour trouver la valeur suivante.

Cela peux paraître facile sauf si on prends en compte les contraintes suivantes :
la procédure GetPrevTSPaket() est déjà une opération qui prend du temps et ma boucle Do Loop imbriquée peux s’exécuter environ un centaine de fois dans ma boucle principale qui elle même s’exécute également une centaine de fois ce qui fait 10000 exécutions de GetPrevTSPaket.
Ne pouvant pas me permettre de faire d'autres boucles je doit pouvoir trouver les valeurs a l’intérieur de ces mêmes boucles.

Par exemple dans la liste (150,10,80,130,30,100,60,120) si je cherche comme valeur cible la valeur 50, la valeur la plus proche sera= 60 et la valeur suivante sera=80.

Un bout de code pour mieux comprendre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
Dim ValeurCible as Long
Dim ValeurProche as Long = LastFindValue
Dim ValeurSuivante as Long
Dim TSPaket as TransportPaket
            num4 = 0
            flag = False
            Do
                num4 += 1
                Do
                    Try
                        TsPaket = Me.GetPrevTSPaket()
                        If TsPaket.HasPES Then then flag = True
                    Catch ex As Exception
                        Throw
                    End Try
                Loop While flag = False
                If TsPaket.GetValue - ValeurCible <ValeurProche - ValeurCible Then
                    ValeurProche = TsPaket.GetValue
                End If
            Loop While Me.BaseStream.Position > Me.FirstSyncBytePosition OrElse num4 <= 100
PS : A noter que ValeurProche contient déjà une valeur avant que ce code s’exécute.

Merci beaucoup si vous pouvez m'aider.