07. november 2004 - 11:17Der er
14 kommentarer og 1 løsning
Mærkelig item-fjernelse fra HashTable
Jeg gemmer VareNummer som Key i min hashKurv (ja ja, ikke det sjove) og antal af varen i den anden del af hashKurv. removeItem bliver fodret med VareNummeret som skal fjernes.
Problemet er hvis jeg har to vare sådan har i min hashKurv:
1 , 3 2 , 4
Hvis jeg siger removeItem(1), har jeg i min hashKurv tilbage:
2 , 3
Og det er selvfølgelig ikke meningen.. :) _______________Kode_____________________________ Public Sub removeItem(int As Integer) If not HttpContext.Current.Session("Kurv") Is Nothing Then Dim hashKurv as new HashTable() hashKurv = HttpContext.Current.Session("Kurv") hashKurv.Remove(int) HttpContext.Current.Session("Kurv") = hashKurv If HttpContext.Current.Session("Kurv").Count < 1 Then HttpContext.Current.Session("Kurv") = Nothing End If End If End Sub
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Jo det er denne.. ____________________________ Public Sub Page_Load If Request.Querystring("Add") = "yes" Then Dim hashKurv as new Hashtable() If HttpContext.Current.Session("Kurv") Is Nothing Then HttpContext.Current.Session("Kurv") = hashKurv End If If not Session("Kurv") Is Nothing Then Dim i As Integer hashKurv = HttpContext.Current.Session("Kurv") i = hashKurv(CInt(Request.Querystring("VareNr"))) hashKurv.remove(CInt(Request.Querystring("varenr"))) hashKurv.add(CInt(Request.Querystring("VareNr")), 1 + i) HttpContext.Current.Session("Kurv") = hashKurv End If Response.Redirect("style.aspx?page=Produkter&VareNr=" & Request.Querystring("VareNr")) Else (...........)
basement - du har skrevet at du går fra 1 , 3 2 , 4
til 2 , 3
og uanset hvordan man vender det så bliver det et lidt mærkeligt resultat :o)
som jeg læser det ville det svare til at der er 3 stk af vare 1, og 4 stk af vare 2, og efter remove(1) er der så 3 stk af vare 2 tilbage ?!?
er du helt sikker på at det er det der sker.... det virker ret spøjst.
men den page_load du lige har sendt ser også lidt speciel ud.... hvorfår putter du noget i kurven i page_load ? skal det ikke ske når en bruger trykker på en knap ell. ? (hvis du har en response.redirect på de knapper man tilføjer noget med, vil du få kørt page_load 2 gange... både når du poster, og når der sidenhen redirectes... men den side du har koden på er måske ikke en der vises eller ?)
mvh (kan du ikke bare tælle værdien under nøglen op ? istedet for at lave en remove + add ?)
Jeg har kogt det ned til : _____________________________________ Imports System Imports System.Collections Imports system.Web.UI.Webcontrols Imports system.Web.UI.Htmlcontrols
Public Class hash: Inherits System.Web.UI.Page Public content as placeholder Public lbl As Label Public Sub Page_Load Dim hashKurv as new Hashtable() addItem(1, hashKurv) addItem(1, hashKurv) addItem(2, hashKurv) addItem(2, hashKurv) addItem(2, hashKurv) lbl = New Label lbl.text = "Først<br>1 : " & hashKurv(1) & "<br>2 : " & hashKurv(2) removeItem(1, hashKurv) lbl.text += "<br>Efter removeItem(1)<br>2 : " & hashKurv(2) content.controls.add(lbl) End Sub Public Sub removeItem(int As Integer, ByRef hashKurv As HashTable) hashKurv.Remove(int) If hashKurv.Count < 1 Then hashKurv = Nothing End If End Sub Public Sub addItem(int As Integer, ByRef hashKurv As HashTable) Dim temp As Integer temp = hashKurv(int) hashKurv.remove(int) hashKurv.add(int, (1 + temp)) End Sub End Class _____________________________________
Jep.. Men når jeg overfører pricippet til min web, virker det stadig forkert.. Er ved at overføre alle pricipperne til min test nu.. Jeg vil vide hvad der er galt.. :)
Public Class hash: Inherits System.Web.UI.Page Public content as placeholder Public lbl As Label Public txt As Textbox Public Sub Page_Load If not Request.Querystring("add") Is Nothing Then addItem(Request.Querystring("add"), HttpContext.Current.Session("Kurv")) Response.Redirect("hashTable.aspx") End If If not Request.Querystring("remove") Is Nothing Then removeItem(Request.Querystring("remove"), HttpContext.Current.Session("Kurv")) Response.Redirect("hashTable.aspx") End If If HttpContext.Current.Session("Kurv") Is Nothing Then Dim hashKurv As new Hashtable addItem(1, hashKurv) addItem(1, hashKurv) addItem(2, hashKurv) addItem(2, hashKurv) addItem(2, hashKurv) HttpContext.Current.Session("Kurv") = hashKurv End If lbl = New Label lbl.Text = "Kurv" Dim i As integer Dim j As integer i = HttpContext.Current.Session("Kurv").Count Dim arKeys As Array = arKeys.CreateInstance(GetType(Integer), i) HttpContext.Current.Session("Kurv").Keys.CopyTo(arKeys, 0) For j = 0 To i-1 lbl.Text += "<br>Vare " & arKeys(j) & " Antal " & HttpContext.Current.Session("Kurv")(arKeys(j)) & ". <a href=""?add=" & arKeys(j) & """>Tilføj</a> <a href=""?remove=" & arKeys(j) & """>Fjern</a>" Next j content.controls.add(lbl) End Sub Public Sub removeItem(int As Integer, ByRef hashKurv As HashTable) hashKurv.Remove(int) If hashKurv.Count < 1 Then hashKurv = Nothing End If Trace.Write("remove") End Sub Public Sub addItem(int As Integer, ByRef hashKurv As HashTable) Dim temp As Integer = 0 If not hashKurv(int) Is Nothing Then temp = hashKurv(int) End If hashKurv.remove(int) hashKurv.add(int, (1 + temp)) Trace.Write("add") End Sub Public Sub btnNy(sender As Object, e As System.EventArgs) addItem(CType(txt.Text, Integer), HttpContext.Current.Session("Kurv")) Response.Redirect("hashTable.aspx") End Sub End Class
Nu fandt jeg ud af det.. :) Det var slet ikke måden jeg tilføjer eller fjerner... Men måden jeg viste mine data på..
Det skyldtes at jeg går igennem mit Array og går igennem en Reader som åbenbart er modsat hinanden sortet.. Kan man sortere et Array præcis modsat af hvad det er, eller synkronisere et Array og en Reader på en eller anden måd?..
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.