Newsgroup: it.comp.lang.visual-basic
Titolo: oggetto Collection

Qual'è il sistema più veloce x trovare una stringa
abinata ad un'altra e ad un indice.
Ad esempio:
Alla stringa "Dieci" e abinata "Ten" con indice 10.
Un oggetto Collection mi sembrava la soluzione migliore.
Ma mi sono accorto che loopando una matrice è decisamente + veloce.
Eppure dall'help:
"Inoltre, a differenza delle matrici, gli oggetti Collection consentono una
ricerca indicizzata estremamente veloce."
X non farVi perdere tempo ecco il codice:
''''''''''' nel Form inserire un CommandButton index 0'''
Private Declare Function GetTickCount Lib "kernel32" () As Long
Dim Mita(10), Musa(10), MYcol As New Collection
Sub indice_in_matrice()
Dim cerca As Integer, trovato As String
    cerca = 10
        start = GetTickCount
            For volte = 1 To 100000     '  0,08~
                trovato = Mita(cerca)
             Next
    Caption = trovato & " Tempo = " & (GetTickCount - start) / 1000
End Sub
Sub string_in_matrice()
Dim cerca As String, trovato As String
    cerca = "Dieci"
    start = GetTickCount
        For volte = 1 To 100000   ' 0,800~
        For idx = 0 To 10
                If cerca = Mita(idx) Then Exit For
             Next
         Next
    Caption = Musa(idx) & " Tempo = " & (GetTickCount - start) / 1000
End Sub
Sub indice_in_Collection()
Dim cerca As Integer, trovato As String
cerca = 11
' ' ' ' '
start = GetTickCount
    For volte = 1 To 100000    '  0,18~
        trovato = MYcol.Item(cerca)
     Next
Caption = trovato & " Tempo = " & (GetTickCount - start) / 1000
End Sub
Sub key_in_Collection()
Dim cerca As String, trovato As String
cerca = "Ten"
' ' ' ' '
start = GetTickCount
    For volte = 1 To 100000    '  2,140~
        trovato = MYcol.Item(cerca)
     Next
Caption = trovato & " Tempo = " & (GetTickCount - start) / 1000
End Sub
Private Sub Command1_Click(Index As Integer)
    CallByName Me, Command1(Index).Caption, VbMethod
End Sub
Private Sub Form_Load()
sss =
"indice_in_matrice,string_in_matrice,indice_in_Collection,key_in_Collection"
sss = Split(sss, ",")
Command1(0).Caption = sss(0)
    For idx = 1 To 3
        Load Command1(idx): Command1(idx).Visible = 1: Command1(idx).Caption
= sss(idx)
    Next
matrix = "Zero,Uno,Due,Tre,Quattro,Cinque,Sei
,Sette,Otto,Nove,Dieci,Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten
"
matrix = Split(matrix, ",")
    For idx = 0 To 10
        Mita(idx) = matrix(idx): Musa(idx) = matrix(idx + 11)
        MYcol.Add matrix(idx), matrix(idx + 11)
    Next
End Sub
Private Sub Form_Resize()
    Me.Scale (0, 0)-(1, 4)
    For idx = 0 To 3
         Command1(idx).Move 0, idx, 1, 1
    Next
End Sub
'''''''''''''''''''''''''END''''''''
Eppure le matrici le ho date Variant.
Oltretutto con le matrici posso cercare le informazioni
in tutti i modi,
mentre con Collection con l'indice o con Key.
Mi spiegate che convenienza c'è ad utilizzare le Collection.
Qualsiasi consiglio x ottenere lo stesso risultato
+ velocemente
mi sarebbe davvero gradito.
Grazie in ogni caso.

 ricerca indicizzata estremamente veloce."
[SNIPPONE]
Non ho letto attentamente tutto il codice, ma mi sembra di aver capito che
il tuo test sia stato fatto su una matrice di 10 soli elementi, dove le
iterazioni in piu' sulla matrice influiscono poco
Prova a fare la ricerca per testo nell'array e l'equivalente per chiave
nella collection con qualche centinaio di elementi, o peggio migliaio, e
guarda la differenza...
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown