Impazzito con gli Array

di il
11 risposte

Impazzito con gli Array

Salve a tutti Again!

Vi espongo il mio problema, con il quale mi sto scervellando, perchè sbaglio qualcosa, ma non so dove.

Partendo da zero, spiego di cosa ho bisogno, senza spiegare invece cosa ho fatto. Magari vi è una soluzione
diversa, e non basata sulla mia 'formulazione'

Lo so!!
E' semplice... Ma quando si va in tilt, sapete anche voi che bisogna staccare e riprendere tempo dopo.

Ho bisogno di storare coppie di dati, che mi è poi possibile recuperare in base al loro 'accoppiamento.
Del tipo:

MiaAssociazioneArray (Valore, Indice)

- 1) Alfa , 0 (come indice)
- 2) Beta , 1 (come indice)
- 3) Gamma , 2 (come indice)

A questo punto (io sto provando ad archiviarlo in listbox oppure combobox, e questo lo posso fare, ma) ho
bisogno che 'puntando' all'indice, possa ri-ottenere il valore corrispondente (alla coppia):

indice 1, valore ritornato Beta (che può essere un nome o un numero. Nel mio caso lo sto associando ad un numero)

Qualche suggerimento!?

Grazie mille per un eventuale aiuto!

11 Risposte

  • Re: Impazzito con gli Array

    Se non ho capito male quello che vorresti fare (è anche possibile ...), potresti utilizzare un oggetto Dictionary.

    Vai nel menu

    Progetto -> Riferimenti

    aggiungi un riferimento alla libreria

    Microsoft Scripting Runtime

    e poi guarda queste linee di esempio
    
        Set oDict = New Dictionary
        
        oDict.Add "1", "Alfa"
        oDict.Add "2", "Beta"
        oDict.Add "3", "Gamma"
        
        Print oDict.Item("2")
    
  • Re: Impazzito con gli Array

    Innanzitutto
    Grazie per la risposta.

    Poi volevo precisare due cose che non ho detto in precedenza (e mi sovviene, proprio in base alla tua risposta):

    1) non vorrei aggiungere nulla di più di quello che offre l' 'operatore' di base (niente ocx etc,),
    ma se si tratta di un semplice modulo in cui poter 'estrarre' funzioni, va bene (nel tuo caso, dovrei inserire una libreria, e
    questo vorrei evitarlo).

    2) Ho dimenticato di dire che il numero di 'coppie' che voglio inserire, non è prestabilito, poichè, in base ad un altro fattore,
    questo può variare e di conseguenza, anche i 'campi' che inserisco non sono definiti.
    L'unica cosa che può avere una congruenza, sarebbe il secondo valore dell'array, essendo un 'indice' percui, andrà sempre
    da 1 (o da 0) fino al numero massimo di 'coppie' che avrò aggiunto.
  • Re: Impazzito con gli Array

    Se usi la libreria risolvi tutto, anche il punto 2) dato che la gestione degli items che puoi aggiungere viene fatto dalla libreria automaticamente.
  • Re: Impazzito con gli Array

    Infatti ho valutato che la tua soluzione sarebbe molto pratica...

    Con quattro righe di codice mi hai subito messo la soluzione davanti agli occhi!

    Ma secondo te: è possibile farlo in altro modo, come dicevo io, cercando di immagazzinarlo in un array... ?

    Solo che mi creo (lo so) il problema di estrarlo poi, da un eventuale listbox o combobox !!
  • Re: Impazzito con gli Array

    Dovresti praticamente rifare quella libreria. Si può fare ma non conosco il tuo livello di conoscenza del linguaggio dato che la questione può non essere banale.

    Devi creare una classe apposita e gestire tutto all'interno, con riallocazione dinamica (Redim) dell'array di strutture adeguato, ricerca veloce (binaria) ... insomma secondo me non vale la pena e comunque non si affronta in un forum.
  • Re: Impazzito con gli Array

    No, non sono un esperto, e quindi non è il caso come dici tu di affrontare una 'sezione di studio' !!

    Credo che mi stai dicendo che la situazione è più complicata di come mi aspettavo...
    Io pensavo invece di potermela cavare più facilmente...

    I punti che non mi sono chiari per giungere alla conclusione, sono fondamentalmente due.

    1) Non riesco a capire se i valori nell'array vengono per modo di dire, associati direttamente, oppure occorre stabilirlo

    2) Come posso estrarre il valore dell'indice dalla listbox (qui, bene o male ci posso arrivare, ma poi in che modo gli 'dico'
    che voglio la sua 'corrispondenza' ??)



    Sai che in realtà stavo formulando una 'alternativa' !?

    Perchè ho pensato che se io 'separo' i valori, anzichè ostinarmi ad averli in un unico 'contenitore', posso poi estrarli
    contemporaneamente, con lo stesso indice... (Tipo in due listbox separate, no!?)




    Però una alternativa 'prima maniera' mi sarebbe piaciuta!
  • Re: Impazzito con gli Array

    Ma perché parli di listbox e ancge di array?
  • Re: Impazzito con gli Array

    Allora, parlo di array e di listbox, poichè, secondo la procedura che sto facendo (non avendo temporaneamente
    l'alternativa), il mio Array e bidimensionale (Valore1, Valore2), e il secondo, lo stivavo in una listbox.

    Il valore2 è l'indice che in realtà si potrebbe pure ottenere con il numero totale di elementi aggiunti
    (esempio: tot 16 elementi inseriti, quindi totale numero indice 16)

    Però, con una listbox, io ottengo 16 elementi selezionabili...

    I quali, mi dovrebbero... INVIARE al maledetto corrispettivo valore1...

    Ma mi sa che non c'è un collegamento diretto, e quindi non mi è possibile ottenerlo.

    ----------

    Però, avevo pensato, che se io li archivio in contemporanea: Valore1 in List1 e Valore2 in List2, contemporaneamente,
    se ricavo l'indice numero X per uno, dovrebbe corrispondermi all'indice X dell'altro, avendo così restituiti entrambe
    i valori... Giusto?
  • Re: Impazzito con gli Array

    No, ma che fai ... che c'entrano le listbox. Stai seguendo una strada assurda.

    Devi utilizzare una struttura (Type) in cui memorizzi un valore e una chiave
    
    Type dicItem
      iKey As Long
      iValue As Variant
    End Type
    
    poi allochi un array di queste strutture
    
    Dim arr() As dicItem
    
    gestendolo in maniera dinamica (con la Redim quando ti serve).

    Ma devi inserire il tutto in una classe in modo da gestire internamente la reallocazione, l'ordinamento e la ricerca e fornire i metodi e proprietà opportune per l'utilizzo esterno.

    Se qualcosa in tutto questo non ti è chiaro, ti consiglio di lascia perdere e utilizzare la libreria già pronta.
  • Re: Impazzito con gli Array

    Progy ha scritto:


    1) non vorrei aggiungere nulla di più di quello che offre l' 'operatore' di base (niente ocx etc,),
    ma se si tratta di un semplice modulo in cui poter 'estrarre' funzioni, va bene (nel tuo caso, dovrei inserire una libreria, e
    questo vorrei evitarlo).
    La libreria che ti ha indicato oregon, il cui file si chiama sccrun.dll, è già presente nel sistema operativo, da Windows 2000 in poi.
    Per cui non devi aggiungere nulla alla distribuzione, anzi sarebbe sbagliato farlo.
  • Re: Impazzito con gli Array

    Allora... Rieccomi e scusate per il ritardo.


    Vedo che ho preso una strada contorta

    Non sono molto avvezzo al sistema di cui mi parlavi (ecco che viene fuori la mia inesperienza...
    Ma non ne faccio un mistero, l'ho confessato che sono in modalità schiappa!)

    Però pur sapendolo, non l'ho mai messo in pratica, e non era proprio a portata dei miei pensieri.

    Però è un occasione per riapprofondire.

    Poi, poichè sia da parte tua (Oregon) che da seconda parte (Gibra) vedo che la la libreria, e caldamente
    consigliata, vedrò un po come fare...


    Intanto voglio ringraziarvi nuovamente, spero di poter trovare ancora un supporto da parte vostra se ne avrò
    bisogno (ed è facile )


    (ps: devo dire che sono tentato in direzione Type... Mi intriga di più!)
Devi accedere o registrarti per scrivere nel forum
11 risposte