Avatar billede syncroniq Nybegynder
05. december 2006 - 11:45 Der er 5 kommentarer

Værdi i array, mangler IN metode..

Hey,

Kan man ikke spørge et array om det indeholder en bestemt værdi?

Jeg har et tal array, og vil gerne vide om den indeholder værdien 25 f.eks. Kan man så ikke spørge i en IF statement om den findes deri?

Altså noget ala :

IF (value is in array) then

end if
Avatar billede thesurfer Nybegynder
05. december 2006 - 14:10 #1
Hmm.. Det ved jeg ikke..

Men man kan lave en funktion, der løber alle elementerne igennem, og checker..
Hvis den finder værdien, returneres TRUE.. ellers returneres FALSE..

Eksempel:

Private Sub Command1_Click()
MsgBox Find(25)
End Sub

Private Function Find(tal As Integer) As Boolean
Dim i As Integer
Dim fundet As Boolean
fundet = False
For i = LBound(arrayens_navn) To UBound(arrayens_navn)
    If (arrayens_navn(i) = tal) Then fundet = True
Next
Find = fundet
End Function


Problemet med den nuværende kode er, at man ikke kan sende en array med, som parameter..

I koden er navnet på arrayen foruddefineret.. Ret "arrayens_navn" til navnet på din array.

I mit eksempel er arrayen defineret i toppen af Visual Basic (globalt)..
Avatar billede thesurfer Nybegynder
05. december 2006 - 14:14 #2
Jeg har optimeret koden lidt:

Private Sub Command1_Click()
MsgBox Find(25)
End Sub

Private Function Find(tal As Integer) As Boolean
Dim i As Integer
Dim fundet As Boolean
fundet = False
For i = LBound(arrayens_navn) To UBound(arrayens_navn)
    If (arrayens_navn(i) = tal) Then
        fundet = True
        Exit For
    End If
Next
Find = fundet
End Function

Ændringen er:

    If (arrayens_navn(i) = tal) Then
        fundet = True
        Exit For
    End If

Den hopper ud af løkken, så snart at den har fundet værdien..

Ingen grund til at lede mere, når den har fundet værdien.. :-)
Avatar billede shy Nybegynder
05. december 2006 - 15:06 #3
Jo man kan godt sende et array med ned i en funktion. Ser således ud:


Private Sub Command1_Click()
Dim MyArray As Variant

MyArray = Array(1, 2, 3, "Hej", "dav", "HELLO WORLD")
Debug.Print IsInArray(MyArray, 2)

End Sub

Private Function IsInArray(Arg As Variant, Find As Variant) As Boolean
Dim X1 As Long

For X1 = LBound(Arg) To UBound(Arg)
    If StrComp(Arg(X1), Find, vbTextCompare) = 0 Then
        IsInArray = True
    End If
Next X1

End Function
Avatar billede syncroniq Nybegynder
05. december 2006 - 15:10 #4
Hey,

Det var mere for at undgå selv at skulle løbe det igennem. Troede der var en smart function der kunne kaldes, men det tyder det ikke på. så jeg må løbe det igennem selv.

Takker for foreslagene.
Avatar billede thesurfer Nybegynder
05. december 2006 - 15:18 #5
Som jeg skrev i mit første indlæg, ved jeg ikke om det er muligt.. det kan det godt være..

Du er velkommen til at vente, på et andet svar..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester