Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    hashtable-recupero elementi in ordine di immissione

    c'è il modo di recuperare gli elementi inseriti in un HashTable secondo l'ordine di inserimento? :master:

    Pietro

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    credo che l'unica sia inserire una chiave con il timestamp relativo all'inserimento, oppure usare un array recuperandoli con l'indice crescente

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da djciko
    credo che l'unica sia inserire una chiave con il timestamp relativo all'inserimento, oppure usare un array recuperandoli con l'indice crescente
    :master: in effetti siamo arrivati alle stesse conclusioni. Però voglio tentare altre strade e chissà :master:
    Pietro

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    forse così va :master:
    codice:
    Partial Class prove_a
        Inherits System.Web.UI.Page
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim j As New NameObjectCollection()
            j.Add("stefano", 1)
            j.Add("carlo", 2)
            j.Add("nicola", 3)
    
            For i As Integer = 0 To j.Count - 1
                Response.Write(j.Keys(i) & ": " & j(i) & "
    ")
            Next
            Response.Write(j("nicola") & "
    ")
            Response.Write(j(2) & "
    ")
        End Sub
    
        Private Class NameObjectCollection
            Inherits NameObjectCollectionBase
    
            Public Sub Add(ByVal key As String, ByVal value As Object)
                If Array.IndexOf(Me.BaseGetAllKeys, key) = -1 Then
                    Me.BaseAdd(key, value)
                End If
    
            End Sub
    
            Public Sub Clear()
                Me.BaseClear()
            End Sub
    
            Public Sub Remove(ByVal key As String)
                Me.BaseRemove(key)
            End Sub
    
            Public Sub Remove(ByVal index As Integer)
                Me.BaseRemoveAt(index)
            End Sub
    
            Default Public Property Item(ByVal key As String)
                Get
                    Return Me.BaseGet(key)
                End Get
                Set(ByVal value)
                    Me.BaseSet(key, value)
                End Set
            End Property
    
            Default Public Property Item(ByVal index As Integer)
                Get
                    Return Me.BaseGet(index)
                End Get
                Set(ByVal value)
                    Me.BaseSet(index, value)
                End Set
            End Property
        End Class
    End Class
    Pietro

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    questo è un altro tentativo: gliela date una occhiata per vedere se va bene? :master:

    codice:
    Public Class HashtableInsertionOrder
        Inherits DictionaryBase
    
        Private _al As ArrayList
    
        Public Sub New()
            Me._al = New ArrayList()
        End Sub
    
        Public Sub Add(ByVal key As Object, ByVal value As Object)
            If Not (Me.Dictionary.Contains(key)) Then
                Me.Dictionary.Add(key, value)
                Me._al.Add(key)
            Else
                Me.Dictionary("key") = value
            End If
        End Sub
    
        Public Sub Remove(ByVal key As Object)
            Me.Dictionary.Remove(key)
            Me._al.Remove(key)
        End Sub
    
        Default Public Property Item(ByVal key As Object) As Object
            Get
                Return Me.Dictionary(key)
            End Get
            Set(ByVal value As Object)
                Me.Dictionary(key) = value
            End Set
        End Property
    
        Default Public Property Item(ByVal index As Integer) As DictionaryEntry
            Get
                Return New DictionaryEntry(Me._al(index), Me.Dictionary(Me._al(index)))
            End Get
            Set(ByVal value As DictionaryEntry)
                Me.Dictionary(Me._al(index)) = value.Value
            End Set
        End Property
    
    
        Public ReadOnly Property Keys() As Object()
            Get
                Return Me._al.ToArray()
            End Get
        End Property
    
        Public ReadOnly Property Values() As Object()
            Get
                Dim o(Me._al.Count - 1) As Object
                For i As Integer = 0 To Me._al.Count - 1
                    o(i) = Me.Dictionary(Me._al(i))
                Next
                Return o
            End Get
        End Property
    
        Public Sub SortKeys()
            Me._al.Sort()
        End Sub
    
        Public Sub SortValues()
            Dim k As Object() = Me.Keys()
            Dim v As Object() = Me.Values()
            Array.Sort(v, k)
            Me._al = New ArrayList(k)
        End Sub
    
    End Class
    questo per il collaudo
    codice:
            Dim ht As New HashtableInsertionOrder()
            ht.Add("stefano", 10)
            ht.Add("carlo", 20)
            ht.Add("nicola", 30)
            ht.Add("pietro", 40)
            ht.Add("lucia", 50)
    
            PrintLn("non ordinato")
            Response.Write("<hr />")
            For Each de As DictionaryEntry In ht
                PrintLn(de.Value, de.Key.ToString())
            Next
    
            PrintLn()
            PrintLn("ordine di inserimento")
            Response.Write("<hr />")
            For i As Integer = 0 To ht.Count - 1
                PrintLn(ht(i).Value, ht(i).Key.ToString)
            Next
    
    
            PrintLn()
            PrintLn("ordine alfabetico delle chiavi")
            Response.Write("<hr />")
            ht.SortKeys()
            For i As Integer = 0 To ht.Count - 1
                PrintLn(ht(i).Value, ht(i).Key.ToString)
            Next
    
            PrintLn()
            PrintLn("ordine alfabetico dei valori")
            Response.Write("<hr />")
            ht.SortValues()
            For i As Integer = 0 To ht.Count - 1
                PrintLn(ht(i).Value, ht(i).Key.ToString)
            Next
    
            Response.Write("<hr />")
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.