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 :
PS : A noter que ValeurProche contient déjà une valeur avant que ce code s’exécute.
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
Merci beaucoup si vous pouvez m'aider.
Partager