webForumDet fria alternativet
Logga in / Bli medlem

Distinkt, Array

ASP

7 svar · 221 visningar · startad av Poffe

Medlem sedan apr. 20022 743 inlägg
Trådstart#1

Hejsan

Undrar om det är nån som vet hur man fixar en funktion som utför en "distinkt på en array".

Jag har alltså en array men flera poster men vissa är likadana så de vill jag sortera bort.

Målet är att få fram hur många olika poster det finns i arrayn, en siffra alltså.

Nån som har nått tips?

Medlem sedan dec. 2000557 inlägg
#2

Är det poster från en databas du sparar i din array?
- I sådana fall kan du använda GetRows och köra en DISTINCT i sql-satsen och på så sätt plocka distinkta poster.

ex.

<%

	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("dbName.mdb")
	arrRecSet = Connect.Execute("SELECT DISTINCT fldName FROM tblName").GetRows
	Connect.Close : Set Connect = Nothing
	
	Response.Write "Just nu finns det "& UBound(arrRecSet,2) &" unika poster.."
	
%>
Medlem sedan apr. 20022 743 inlägg
#3

nej det är det som är kruxet, arrayn skapas utifrån en textfil, hade det vart från en databas är det ju inga problem :)

Medlem sedan dec. 2000557 inlägg
#4

Aha, ok.. :)
Hur ser värden i arrayen ut?

Medlem sedan apr. 20022 743 inlägg
#5

hmmm.. ja du, är inte så inne på arrays riktigt än men den är två dimentionell och jag skapar den så här:

Set oTextFil = oFSO.OpenTextFile(sDbFil)
	Do While Not oTextFil.AtEndOfStream
		x = x + 1
		sPost = Split(oTextFil.ReadLine, "|")
		For i = 0 To Ubound(sPost)
			DbArray(i,x) = sPost(i)
		Next
	Loop
oTextFil.Close : Set oTextFil = Nothing

varje rad i textfilen har olika poster separerade med | så första dimentionen är alltså värdet och andra är raden.

det jag vill få fram hur många olika som finns är ifrån:

DbArray(1,x)

alltså andra (det börjar på 0 få 1 blir ju andra) värdet från varje rad

Medlem sedan dec. 2000557 inlägg
#6

Hmm.. ok. Tyvärr övergår det min kunskap. ;)
Gjorde dock en sökning på Google och fann detta, kanske kan vara nått att titta på iaf. :)

http://www.aspfree.com/authors/robert/Default.asp?aid=66

Medlem sedan apr. 20022 743 inlägg
#7

tack, ska kolla på det och se om jag kan lösa det på nått vis :)

Medlem sedan apr. 20022 743 inlägg
#8

jo det blev som jag tänkt från början:

Function Unika()
	sTemp = ""
	For x = 1 To Ubound(DbArray,2)
		If InStr(sTemp, DbArray(1,x) & ",") <= 0 Then sTemp = sTemp & DbArray(1,x) & "," : iTemp = iTemp + 1
	Next 
	Unika = iTemp
End Function

men är detta verkligen den bästa metoden?

Red/

har testat lite nu och det verkar vara den bästa av de som fanns där iallafall, skilljer endast några millesekunder men ändå ;)

261 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)