2013-07-19 9 views
7

Chciałbym poznać najbardziej efektywny sposób tworzenia nowych tablic z treści innych macierzy.Utwórz nową tablicę przy użyciu zawartości innych tablic w języku C#

Mam kilka tablic ciągów typu:

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" }; 

byłoby możliwe stworzenie teraz nową tablicę sznurka w sposób podobny do tego?

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

Który zawierałby wszystkie łańcuchy zawarte w innych tablicach.

+2

Myślę, że musisz spojrzeć na inny mechanizm przechowywania. Być może nadszedł czas, aby przedstawić te dane w tabelach Sql. Łatwiej będzie zarządzać i uczynić go bardziej intuicyjnym. Czy pracowałeś już z Sql? –

+0

Używam tych tablic do robienia pewnych wyjątków w analizie danych, a później chciałbym dodać do mojego narzędzia przycisk ustawień, aby edytować wykluczenia, a także inne rzeczy, polecasz mi małą bazę danych do przechowywania ustawień? A może byłby to lepszy plik XML? Dzięki za komentarz. – lostborion

Odpowiedz

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

Dla osób, które nie znają [SelectMany] (http://msdn.microsoft.com/en-us/library/system.linq.enumerable.selectmany.aspx). – tokyovariable

6

można połączyć dwie tablice.

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

Myślę też, że w twoim przypadku można chyba warto rozważyć inny typ struktury danych. Myślę, że słownik może dobrze pasować.

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

Klucz może być krajem, a wartość może być tablicą dla tego kraju.

8

Można zabrać swoje próby, która generuje tablicę tablic, a następnie spłaszczyć go za pomocą SelectMany z powrotem w dół do tablicy ciągów.

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

Można również użyć kruszywa i unia do osiągnięcia tego celu, jeśli chcesz tylko unikatowe wartości w tablicy ciągów

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

Jest to znacznie mniej wydajne niż inne przedstawione podejścia. Rekonstruujesz wewnętrzny zestaw "HashSet" każdego zestawu dla każdego kroku agregacji. Jeśli ważne jest posiadanie unikatowych wartości, możesz po prostu wcisnąć 'Distinct' call na końcu' SelectMany' i zrobi to samo, będzie bardziej czytelny dla czytelnika i będzie działał znacznie lepiej. Ponadto twoja obsada nie robi nic znaczącego. – Servy

0

Może chcesz stworzyć jagged array takiego:

string[][] ASIA = new string[][] { Taiwan, Vietnam, Korea, China, Japan }; 
Powiązane problemy