Accesso elementare negli array

2

Stavo leggendo le strutture dati da Code Complete. Questo è quando mi sono imbattuto in questo pezzo sugli array:

Think of arrays as sequential structures Some of the brightest people in computer science have suggested that arrays never be accessed randomly, but only sequentially (Mills and Linger 1986). Their argument is that random accesses in arrays are similar to random gotos in a program: Such accesses tend to be undisciplined, error prone, and hard to prove correct. Instead of arrays, they suggest using sets, stacks, and queues, whose elements are accessed sequentially.

Questo vale per la classe System.Array in C #?

    
posta TheSilverBullet 13.02.2013 - 13:40
fonte

2 risposte

3

Lo fa certamente. Le matrici in C # sono molto simili agli array in altri linguaggi di programmazione.

Alcune differenze tra gli array allocati dinamicamente in C e le matrici in C #:

  • In C #, la matrice conosce sempre la sua lunghezza.
  • Non è possibile utilizzare l'aritmetica del puntatore in C # (a meno che non si utilizzi unsafe ). Ciò significa che una parte dell'array non può essere rappresentata come (puntatore, lunghezza), deve essere rappresentata come qualcosa di simile (riferimento, start_index, lunghezza).

Ma nessuna di queste differenze è rilevante per la citazione in questione.

Inoltre, C # rende facile trattare l'array come una struttura sequenziale: implementa IEnumerable<T> e può essere utilizzato in un foreach (sebbene nessuno di questi ti consenta di modificare l'array). Ciò significa che è possibile eseguire l'iterazione dell'array senza utilizzare gli indici. Ad esempio:

foreach (var item in array)
    Console.WriteLines(array);

O (usando LINQ, che è basato su IEnumerable<T> ):

var unavailableProducts = products.Where(p => p.InStock == 0);
    
risposta data 13.02.2013 - 14:21
fonte
2

Il punto non è specifico per la lingua, quindi, per quanto lo detiene, vale per C #. (L'unica eccezione potrebbe essere se la tua lingua ha array in cui l'accesso casuale non è O (1), ma non riesco a pensare a una mano vuota.)

Ma ovviamente ci sono situazioni nella programmazione in cui sicuramente non devono accedere a tutti gli elementi di una raccolta, ma solo un particolare oggetto per richiesta, e in tali situazioni può essere utile organizzare gli articoli in un array per un rapido accesso. Non credo che nessuno possa sostenere che l'accesso casuale per sé è indisciplinato e dovrebbe essere evitato in qualsiasi situazione - ma in quelli in cui il loop fa il trucco, è davvero più facile da programmare e verificare.

    
risposta data 13.02.2013 - 14:24
fonte

Leggi altre domande sui tag