2010-11-13 12 views
5

C'è un motivo per attenersi agli array come struttura dati elenco predefinita in AS3 se si sta puntando a Flash Player 10? Perché non utilizzare vettori (array tipizzati) come impostazione predefinita tutto il programma dal momento che sono:In Flash Player 10 con Vettori, perché dovresti usare più Array?

  • più veloce
  • Tipo E

Ha esegue male o incorrere in spese generali di memoria più elevate? Qualche ragione per usare gli array più?

risposta

4

Sto rispondendo alla mia domanda in base a ciò che ho appreso del problema.

Vettori sono più veloci per questi tipi di dati SOLO: - (proof)

  • int
  • uint
  • Numero
  • booleano

array sono preferibili per tutti gli altri tipi S:

  • Strings
  • classi

vettori sono più limitate di lavorare con:

  • lettura/scrittura è limiti controllati
    • slot inesistenti non può essere impostare direttamente con [5] = Val
    • slot inesistenti non possono essere letti (o si otterrà un Exception)
  • deve spingere() per creare fessure
  • ordinamento è più lento

vettori sono più problematico:

  • array multi-D non possono essere convertiti in un vettore
  • vettore non può essere convertito in un array multi-D
  • non può funzionare con String.split()
  • tipo fisso per tutti gli elementi - inutilizzabile per JSON

vettori possono essere più facili da eseguire il debug:

  • l'impostazione di un [vettore di int] in un [vettore di vettore di int] un'eccezione
  • errori di compilazione (in alcuni casi)
    • quando si cerca di impostare un [vettore di int] in un [vettore di stringhe]
    • quando si cerca di impostare un [vettore di int] in [vettoriale di vettore di int]
+0

Interessante. Io stesso mi sono chiesto come avrebbero sostituito le varie classi di raccolta che uso come dataProvider per vari controlli orientati a 'ListBase'. Uno degli enormi inconvenienti che vedo è che non è possibile impostare il 'sorgente' di un' Vector' nel modo che è possibile con un 'ArrayCollection'. Puoi persino istanziare una semplice 'matrice 'usando un' Array.slice() 'da un'altra matrice. I vettori devono crescere in modo iterativo, immagino. Mi chiedo ora cosa userò per questi. – Robusto

+0

Se non ti dispiace, Jarvis, ho un paio di domande: perché gli array sono preferibili per le stringhe e come non sei in grado di lavorare con String.split()? – Panzercrisis

6

Un sacco di motivi. I vettori non sono popolati scarsamente, ad esempio, in modo che se il tuo vettore ha un indice di 999, hai un array di 1.000 elementi. In una matrice standard, potresti averne solo uno.

+2

Un vettore può opzionalmente essere di lunghezza fissa, cioè la sua lunghezza può non cambia. E non puoi mai aggiungere più di un elemento alla volta a un array (per la ragione menzionata nella risposta). Detto questo, i Vettori sono molto carini per i due motivi che hai menzionato. – Robusto

+0

Sei sulla strada giusta, ma ho formulato l'utilizzo ideale per vettori e array. Vedi la mia risposta. –

3

Forse proprio quando non si conosce il tipo - è un elenco liberamente basato, in un certo senso. Come, ad esempio, con i dati JSON.

Modifica: oh, ecco un altro semi-motivo - String.split(). Questo ti restituirà una serie di stringhe. Non so perché non puoi prendere uno Vector.<String>, grr.

Detto questo, in Flash 10+, il 99% delle volte si utilizzerà invece Vettori. Tutti gli "svantaggi" dei vettori sono solo per casi d'uso molto specifici (spesso rari).

+0

Grazie per l'aiuto, ma ho risposto alla mia domanda, spero che ti aiuti ad avere una comprensione più ampia dell'argomento. –

2

Come già affermato da Robusto, i vettori non sono scarsamente popolati. Anche se questo potrebbe essere negativo per dimensioni, è molto-molto buono per la velocità. Quindi se non hai bisogno di strutture popolate molto sparse (e che per implementare quella cosa sparsa ci vuole anche dello spazio extra), puoi semplicemente approfittare della velocità.

E 'il tipico compromesso di: memoria vs. velocità :-)

+0

Ho risposto alla mia domanda, spero che ti aiuti ad avere una comprensione più ampia dell'argomento. –

2

Dipende solo da cosa si sta cercando di fare. Prova a ordinare un vettore? Ci vorrà molto più tempo. Avrai bisogno di unire un array o un vettore? In tal caso, probabilmente vorrai buttarli entrambi e usare un elenco collegato. Se stai cercando qualcosa con le chiavi nominate a cui devi fare riferimento, probabilmente utilizzerai un dizionario. È una risposta vaga, inutile - "dipende" - ma lo fa davvero. C'è una ragione per cui ci sono così tante diverse strutture di liste di dati.

+0

Controlla la mia risposta, ragazzi! Spero che sia d'aiuto. –

Problemi correlati