webForumDet fria alternativet

If minArray innehåller talet 23 Then

ASP

3 svar · 227 visningar · startad av Kristianstad

Medlem sedan dec. 2002841 inlägg
Frågan#1

I arrayen minArray(a,b) finns en massa olika värden.

Jag vill kolla om någon av dessa värden innehåller ett visst tal.

Man kan ju självklart loopa upp alla värden och sedan kolla om talet finns där. Men jag skall göra denna kod på 20 ställen på sidan och vill ha något som är riktigt snabbt.

If minArray innehåller talet 23 Then
' Händelse
End If

Kan någon hjälpa mig med denna kod?

Tack på förhand!

Medlem sedan juni 200032 967 inlägg
#2
if instr ("#" & join(minArray, "#") & "#", "#23#") > 0 Then

Edit: eller menar du att det är en tvådimensionell array? Då måste du nog loopa är jag rädd.

Mvh

Medlem sedan dec. 2002841 inlägg
#3

Ja, det är en tvådimensionell array.

	For k = 0 To Ubound(minArray,2)
	  If minArray(0,k) = 22 Then
	  Response.Write "!!!!"
	  Exit For
	  End If
	Next

Går det att optimera ännu mer?

Är det förresten resurskrävande att köra denna kod 40 gånger? Arrayn har ungefär 6 värden.

Medlem sedan juni 20034 013 inlägg
#4

Att loopa igenom värdena blir nog snabbast för dig. Det finns ju ett antal tekniker för sökning men jag tror det är överkurs. I och för sig är ju en ganska enkel att sortera arrayen i nummerordning. Det innebär ju att du bara behöver loopa fram till dess att aktuellt tal är större än det du söker efter. Exempel:

Array: 1, 5, 7, 8, 24, 32, 35, 42, 52, 55, 57, 59, 60, 62, 99

Söker du nu efter 20 så kan du ju stoppa när du kommit till 24 eftersom det är större än 20 och du på grund av sorteringen vet att det inte kommer mindre tal.

Annars är den lite mer avancerade lösningen ett så kallat binärt träd. Det är också en form av sortering, men det utgår från det tal som kommer i mitten vid en vanlig sortering. Till vänster om talet finns alla tal som är mindre och till höger finns alla som är större. Det första talet som kommer till vänster är dock det som ligger mittemellan i ordningen bland de talen. Likaså med det till höger fast tvärtom, osv nedåt... Exempel:

                        42
         8                             59
   5          32                 55          62
1    7     24    35           52    57    60    99

Ska du nu söka efter 64 så går du först till 42. Är 64 större? Ja, gå till höger. Nej, gå till vänster. Det blir höger, vi kommer till 59. Är 64 större? Ja, höger. Större än 62? Ja, det också, vi kommer till 99. Där tar det stopp. Sökningen är klar. 64 fanns inte.

Finns 57? Större än 42? Ja. Större än 59? Nej, vänster och vi kommer till 55. Är 57 större än 55? Ja, till höger och vi landar på 57.

256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)