2010-01-08 11 views

Odpowiedz

34

Więc chcesz tablicę string, jeden char każda:

string s = "abcdef"; 
string[] a = s.Select(c => c.ToString()).ToArray(); 

To działa, ponieważ string realizuje IEnumerable<char>. Tak więc, każdy z projektów reprezentuje, że char i i wylicza rzutowanie i konwertuje wynik na tablicę o numerze string.

Jeśli używasz starszej wersji C#:

string s = "abcdef"; 
string[] a = new string[s.Length]; 
for(int i = 0; i < s.Length; i++) { 
    a[i] = s[i].ToString(); 
} 
+0

Tak naprawdę, chociaż oba przykłady dadzą taką samą tablicę ciągów na końcu, druga ("starsza") droga jest znacznie szybsza. LINQ musi wykonać znaczną część translacji napowietrznej przed zrzuceniem kodu do zasadniczo drugiego zestawu kodu. Wypróbuj test czasowy; LINQ trwa ponad dwa razy dłużej niż przykład "longhand". –

+0

Podejrzewam, że coś jest nie tak z Twoją metodą pomiaru czasu. – jason

8

Tak.

"abcdef".ToCharArray(); 
+4

Powiedział, że tablica 'string', a nie tablica' char'. Zauważ, że gdybyś mógł 'String.Split' na pustym' char' między każdym 'char' w' ciągu' wynik byłby 'string []'. To wydaje się być zachowanie, którego szuka. – jason

+2

Mój zły. Wziąłem wolność próbując zinterpretować niewłaściwą gramatykę jego pytania, ale moja interpretacja była wyraźnie błędna. Dziękuję za wskazanie. –

3

Można używać LINQ i zrobić:

string value = "abcdef"; 
string[] letters = value.Select(c => c.ToString()).ToArray(); 

Byłoby to Ci tablicę ciągów zamiast tablicy znaków .

0

Trochę więcej niż powyżej, ale nie widzę dla tego żadnej prostej linijki.

List<string> results = new List<string>; 

foreach(Char c in "abcdef".ToCharArray()) 
{ 
    results.add(c.ToString()); 
} 


results.ToArray(); <-- done 

Co jest nie tak z string.split ???

3

Dlaczego nie można po prostu

string value="abcd"; 

value.ToCharArray(); 

textbox1.Text=Convert.toString(value[0]); 

pokazać pierwszą literę łańcucha; to byłby "a" w tym przypadku.

Powiązane problemy