[ASP] Hoogste waarde uit array halen

Pagina: 1
Acties:

  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:23

Dope-E

The one and only Dope

Topicstarter
Ik heb een probleem met een array...

De array ziet er bijvoorbeeld als volgt uit:
code:
1
2
3
4
5
6
7
8
9
'.. betekent dat al die plekken leeg zijn

array(1) = [leeg]
..
array(10020) = 23
..
array(10034) = 45
..
'enz.

Hoe kan ik de index retreiven van het array item met de hoogste waarde?
Dus in dit geval 10034.

twitter.com/curly_sanders


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Je kan lengte met Ubound bepalen, dus zoiets als

var hoogste = arrayx(ubound(arrayx-1))

ofzo

  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:23

Dope-E

The one and only Dope

Topicstarter
Dat is niet echt wat ik bedoelde, ik ben bekend met UBound, die geeft je de hoogste index terug van een aaray, ongeacht de inhoud.
Stel dat er nog een "array(10060) = 12" zou zijn, dan wil ik toch die met de hoogste waarde eruit halen en dat is 10034...

twitter.com/curly_sanders


  • Exterazzo
  • Registratie: Mei 2000
  • Laatst online: 10:30

Exterazzo

Qeasy

jah maar als je dan dit hebt:

array(1) = 4
array(2) = 9
array(3) = 2

met Ubound krijg je dan toch de waarde 3 (de hoogste gedefineerde array) en hij moet waarde 9 (de hoogste waarde in alle arrays) hebben.

Audentia


  • Exterazzo
  • Registratie: Mei 2000
  • Laatst online: 10:30

Exterazzo

Qeasy

ik denk dat je dan toch je hele array moet doorlopen :( hoe klote dat ook is

Audentia


Verwijderd

[uit losse pols niet getest mode]
code:
1
2
3
4
5
6
7
8
9
dim teller,hit,value
hit=lbound(array)
value=array(lbound(array))
for teller = lbound(array) to ubound(array)
   if value < array(teller)
     hit=teller
     value=array(teller)   
   endif
next

[/uit losse pols niet getest mode]
zoiets kan je toch best zelf verzinnen?

  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:23

Dope-E

The one and only Dope

Topicstarter
hmmm minder :'(

iemand anders een idee :?

twitter.com/curly_sanders


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op donderdag 21 maart 2002 17:08 schreef Exterazzo het volgende:
ik denk dat je dan toch je hele array moet doorlopen :( hoe klote dat ook is
Sterker nog je _moet_ je hele array doorlopen, anders kan je _geen_ garantie hebben of wat je gebruikt wel echt het maximum is. Want je weet dan tenslotte niet of die andere waarden nou wel of niet groter zijn/waren.

  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:23

Dope-E

The one and only Dope

Topicstarter
Op donderdag 21 maart 2002 17:11 schreef Yarvieh het volgende:
[uit losse pols niet getest mode]
code:
1
2
3
4
5
6
7
8
9
dim teller,hit,value
hit=lbound(array)
value=array(lbound(array))
for teller = lbound(array) to ubound(array)
   if value < array(teller)
     hit=teller
     value=array(teller)   
   endif
next

[/uit losse pols niet getest mode]
zoiets kan je toch best zelf verzinnen?
Zoiets had ik idd al wel, maar ik vroeg me af of er niet een simpele functie voor zou zijn, maar die kon ik ook niet googlen ;)
Alleen lijkt me als je een array hebt met een UBound van 15000 oid, dat t niet zo vlotjes zal gaan...
maar thanx anyway :)

twitter.com/curly_sanders


Verwijderd

Aan de andere kant, ik neem aan dat je ook ergens deze array vult. Als je tijdens dat vullen nou bijhoudt wat de hoogste waarde is, kun je die later weer gebruiken...

Verwijderd

Ehh wat had je dan verwacht dat je een functie had die automagish het hoogste getal uit die array zou pikken? die functie zou intern precies het zelfde doen.wellicht ietjes sneller ivb de geinterperteerde wereld van asp maar niet zo heel veel, er moet gewoon door heel die array heen gelopen worden of je wil of niet..

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Als je zo extreem veel getallen wilt opslaan en dan er dingen mee wilt doen is een database misschien handiger, alhoewel je daar de kern van het probleem (heel veel checks) niet mee opleest, maar voordeel is dat je in ieder geval op eenvoudige manier van een snel mechanisme gebruik kan maken.

  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:23

Dope-E

The one and only Dope

Topicstarter
Op donderdag 21 maart 2002 17:23 schreef raptorix het volgende:
Als je zo extreem veel getallen wilt opslaan en dan er dingen mee wilt doen is een database misschien handiger, alhoewel je daar de kern van het probleem (heel veel checks) niet mee opleest, maar voordeel is dat je in ieder geval op eenvoudige manier van een snel mechanisme gebruik kan maken.
Die mogelijkheid was ik ook aan t overwegen, ik ga denk ik beide opties uitproberen en kijken welke het snelst werkt.

twitter.com/curly_sanders


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Is het niet een id om de waardes in die array gewoon gesorteerd te bewaren? Dan kun je simpel de hoogste en de laagste waarde bepalen. Als je vervolgens nog een leuke datastructuur (boom) gebruikt gaat het zoeken ook lekker snel :)..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 10-09 21:20

mOrPhie

❤️❤️❤️❤️🤍

[edit]
sorry, hier stond ubound, maar dat was het idee niet... zag ik net..., solly again

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Verwijderd

Op donderdag 21 maart 2002 23:00 schreef mOrPhie het volgende:
Gewoon zo:
code:
1
lngHoogsteWaarde = uBound(JouArrayVar)

Dan ist geregeld :)
Dan krijg je de hoogste index in je array, niet de hoogste waarde.

  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:23

Dope-E

The one and only Dope

Topicstarter
Op donderdag 21 maart 2002 20:06 schreef Janoz het volgende:
Is het niet een id om de waardes in die array gewoon gesorteerd te bewaren? Dan kun je simpel de hoogste en de laagste waarde bepalen. Als je vervolgens nog een leuke datastructuur (boom) gebruikt gaat het zoeken ook lekker snel :)..
Het is onmogelijk om het gesorteerd in een array te stoppen...
Het zit namelijk zo: Ik heb een tabel en daar staan per klantorder alle producten.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TABLE "klantorder_product"

 id    | klantorder_id | product_id | aantal
---------------------------------------------
 1     | 10045     | 10031  | 2
 2     | 10045     | 10040  | 1
enz.

TABLE "klantorder"

 klantorder_id | klant_id 
--------------------------
 10045     | 10010
enz.

nu wordt er dus gekeken naar een product id en aan de hand daarvan bepaald welke klant_id's dat product hebben gekocht. daarna wordt er gekeken welke producten die klanten kochten behalve dit product... Vervolgens worden de totalen (van aantal) bepaald per product en het product met het hoogste totaal moet ik hebben.
duidelijk?

Ik heb t nu dus op 2 manieren gedaan:
- Via een paar arrays, wat er op neer komt dat de laatste array er uit zal zien als in mijn eerste post geillustreerd.

- Via een array en daarna een tijdelijke tabel.
De laatste is af en toe een tikkeltje sneller, maar het scheelt niet echt veel van elkaar.

twitter.com/curly_sanders


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Ehh is het niet een idee om gewoon een query los te laten op je tabel ipv in je array te gaan kloten?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:23

Dope-E

The one and only Dope

Topicstarter
Ok ik zal uitleggen hoe ik het nu doe en daarna mag iemand me uitleggen hoe dat in 1 query gepropt kan worden...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
'eerste query, klant_order_id's ophalen voor orders met hetzelfde product_id
SELECT DISTINCT klant_order_id FROM kt_Klant_Order_Product WHERE product_id=" & product_id " ORDER BY klant_order_id

'hieruit wordt de volgende string gebouwd:
sql_temp = " FROM kt_Klant_Order_Product WHERE product_id<>" & product_id & " AND ("
temp_counter = 1
do while not recordset.EOF
    if temp_counter = 1 then
      sql_temp = sql_temp & "klant_order_id=" & recordset("klant_order_id")
    else
      sql_temp = sql_temp & " OR klant_order_id=" & recordset("klant_order_id")
    end if
    temp_counter = temp_counter + 1
    recordset.MoveNext
loop
recordset.close
sql_temp = sql_temp & ")"

'tweede/derde, product_id's ophalen waar voorgaande gevonden klant_order_id's aan voldoen
"SELECT COUNT(*)" & sql_temp
redim product_array(recordset)
"SELECT DISTINCT product_id" & sql_temp & " ORDER BY product_id"

'product_array wordt gevuld
temp_counter = 1
do while not recordset.EOF
    product_array(temp_counter) = recordset("product_id")
    temp_counter = temp_counter + 1
    recordset.MoveNext
loop
recordset.close

'nu gaan we een tijdelijke table creeeren (met mooi gegenereerde unieke naam:
dim temp_table,Tools
Set Tools = Server.CreateObject("MSWC.Tools")
temp_table = "temp_" & (Abs(Tools.Random)*CLng(Replace(CStr(Timer),",","")))
"CREATE TABLE " & temp_table & "(product_id int PRIMARY KEY, totaal int)"

for temp_counter = 1 to UBound(product_array)
    "SELECT SUM(aantal) AS aantal FROM kt_Klant_Order_Product WHERE product_id=" & product_array(temp_counter)
    "INSERT INTO " & temp_table & " VALUES(" & product_array(temp_counter) & "," & recordset("aantal") & ")"
    recordset.close
next

Zo nu hebben we een tabel met product_id en totaal, die makkelijk gequeried kan worden op MAX of ORDER BY,etc.

Knappe jongen die dit in een query kan stoppen ;)

twitter.com/curly_sanders


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 08:14

Crazy D

I think we should take a look.

Op vrijdag 22 maart 2002 13:17 schreef Dope-E het volgende:
Knappe jongen die dit in een query kan stoppen ;)
Stored procedure? :)

Exact expert nodig?


  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:23

Dope-E

The one and only Dope

Topicstarter
Op vrijdag 22 maart 2002 13:53 schreef Crazy_D het volgende:
Stored procedure? :)
Hmmm ja is ook een idee natuurlijk!
Heb er alleen geen ervaring mee, dat wordt dus hoog tijd dan :)

Back to work :P

twitter.com/curly_sanders


  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:23

Dope-E

The one and only Dope

Topicstarter
Nou ik heb ff rondgeneusd hier en daar, maar over het algemeen wordt er gedacht dat als je zo'n zooi aan variabelen hebt het sowieso nauwelijks performancewinst kan opleveren door stored procedures.
En verder heb ik nergens duidelijk kunnen vinden hoe je voor zoveel queries een (of meerdere) procedures zou moeten bouwen. want de ene query wordt natuurlijk weer opgebouwd uit t resultaat van de andere...

Ik denk dat ik t zo maar laat, heeft al genoeg tijd gekost zo ;)

twitter.com/curly_sanders


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 08:14

Crazy D

I think we should take a look.

Op vrijdag 22 maart 2002 14:58 schreef Dope-E het volgende:
Nou ik heb ff rondgeneusd hier en daar, maar over het algemeen wordt er gedacht dat als je zo'n zooi aan variabelen hebt het sowieso nauwelijks performancewinst kan opleveren door stored procedures.
Weet ik niet, maar als je uiteindelijk een stored proc bakt die een mooie recordset teruggeeft met precies hetgeen wat je wilt, is het in ieder geval wel stoer 8-) ;)
En verder heb ik nergens duidelijk kunnen vinden hoe je voor zoveel queries een (of meerdere) procedures zou moeten bouwen. want de ene query wordt natuurlijk weer opgebouwd uit t resultaat van de andere...
Cursor... dat kun je zien (of misschien is het wel hetzelfde...) als een recordset.
Ik denk dat ik t zo maar laat, heeft al genoeg tijd gekost zo ;)
:D

Exact expert nodig?

Pagina: 1