2013-07-19 8 views
7

Vorrei conoscere il modo più efficiente per creare nuovi array dal contenuto di altri array.Creare un nuovo array utilizzando il contenuto di altri array in C#

Ho diversi array di stringhe del tipo:

public readonly string[] Taiwan = { "TW", "TWO" }; 
public readonly string[] Vietnam = { "HM", "HN", "HNO" }; 
public readonly string[] Korea = { "KQ", "KS" }; 
public readonly string[] China = { "SS", "SZ" }; 
public readonly string[] Japan = { "T", "OS", "NG", "FU", "SP", "Q", "OJ", "JNX", "IXJ", "KAB", "JA", "JPx" }; 

Sarebbe possibile creare ora un nuovo array di stringhe in un modo simile a questo?

public readonly string[] ASIA = { Taiwan, Vietnam, Korea, China, Japan}; 

Ciò conterrebbe tutte le stringhe incluse negli altri array.

+2

Penso che sia necessario considerare un diverso meccanismo di archiviazione. Potrebbe essere il momento di rappresentare questi dati nelle tabelle Sql. Sarà più facile da gestire e rendere più intuitivo il senso. Hai già lavorato con Sql? –

+0

Sto usando questo array per fare alcune esclusioni nell'analisi dei dati e più avanti vorrei aggiungere al mio strumento un pulsante impostazioni per modificare le esclusioni e altre cose, mi consigliate un piccolo database per memorizzare le impostazioni? O sarebbe meglio un file XML per quello? Grazie per il commento. – lostborion

risposta

10
string[] ASIA = new []{ Taiwan, Vietnam, Korea, China, Japan} 
         .SelectMany(s => s) // not entirely sure what these abbreviations are... 
         .ToArray(); 
+4

Per quelli che non hanno familiarità con [SelectMany] (http://msdn.microsoft.com/en-us/library/system.linq.enumerable.selectmany.aspx). – tokyovariable

6

è possibile concatenare due array.

string[] newArray = arrA.Concat(arrB).ToArray(); 

Penso anche che nel tuo caso potresti voler prendere in considerazione un diverso tipo di struttura dati. Penso che un dizionario potrebbe essere una buona idea.

Dictionary<string, string[]> Asia = new Dictionary<string, string[]>(); 

La chiave può essere il Paese e il valore può essere la matrice per quel paese.

8

Si può prendere il vostro tentativo, che genera un array di array, e poi appiattirla con SelectMany di nuovo giù in un array di stringhe.

public readonly string[] ASIA = new[] { Taiwan, Vietnam, Korea, China, Japan} 
    .SelectMany(countryCode => countryCode) 
    .ToArray(); 
0

È inoltre possibile utilizzare aggregazione e di unione per raggiungere questo obiettivo se si desidera solo valori univoci nella matrice di stringhe

ASIA = ((new IEnumerable<string>[ ] { 
       Taiwan , Vietnam , Korea , China , Japan 
     }) 
      .Aggregate ((a , b) => a.Union (b)) 
      .ToArray(); 
+0

Questo è notevolmente meno efficiente rispetto agli altri approcci mostrati. Stai ricostruendo il 'HashSet' interno di ogni set per ogni fase dell'aggregazione. Se è importante avere valori univoci puoi semplicemente attaccare una chiamata 'Distinct' alla fine di un' SelectMany' e farà la stessa cosa, sarà più chiara per il lettore e funzionerà molto meglio. Inoltre, il tuo cast non ha alcun significato. – Servy

0

si potrebbe desiderare di creare un jagged array come questo:

string[][] ASIA = new string[][] { Taiwan, Vietnam, Korea, China, Japan }; 
Problemi correlati