2008-10-11 9 views
1

J'ai un tableau à 2 dimensions, comme ceci:Comment créer une chaîne à partir d'une ligne d'un tableau de caractères rectangulaire bidimensionnel en C#?

char[,] str = new char[2,50]; 

Maintenant, après que je l'ai contenu stocké dans les deux str [0] et str [1], comment puis-je stocker dans un

string[] s = new string[2]; 

?

J'ai essayé

s[0] = str[0].ToString(); 

mais qui semble être une erreur: de deux indices 'VC# dans les accolades attend à ce que, ce qui signifie que je peux convertir seulement un personnage du tableau. Y at-il un moyen de convertir l'ensemble de str [0] en une chaîne? Ou est en train de le changer en un tableau déchiqueté la seule solution?

+0

Salut, j'ai posté mais attention dudnt salariale au type de tableau. Je vais poster du code à nouveau sous peu. – mattlant

+0

Je vous recommande également de changer le titre de cette question pour qu'elle soit posée sous forme de question. Par exemple, "Comment créer une chaîne à partir d'une ligne d'un tableau de caractères rectangulaire bidimensionnel?". –

+0

Merci ... Je me suis rendu compte que le titre était parfaitement formulé, mais je ne pouvais pas penser à un meilleur alors. Merci pour la recommandation. :) – sundar

Répondre

3

Une matrice dentelée est presque toujours la meilleure solution pour diverses raisons, et c'est un bon exemple. Il y a tellement plus de flexibilité disponible avec un tableau de tableaux qu'avec un tableau multidimensionnel. Dans ce cas, une fois que vous avez les valeurs dans un tableau de caractères, alors un constructeur de la classe de chaînes peut être utilisé pour créer une chaîne à partir de celui-ci.

En outre, le tableau en dents de scie serait composé de "vecteurs" (c'est-à-dire, des tableaux unidimensionnels avec un indice de liaison inférieure), qui sont beaucoup plus préférentiels en .Net parce qu'ils sont traités CLR. Donc, sans savoir ce que fait le reste de votre programme, ce serait ma recommandation.

Si vous tentez de construire manuellement une chaîne en faisant une boucle sur les index de tableau, au lieu d'utiliser un tableau en escalier, je recommande d'utiliser la classe StringBuilder pour le faire.

Je viens cogné ceci, mais il devrait être quelque chose comme ceci:

// For the multi-dimentional array 
StringBuilder sb = new StringBuilder(); 
for (int stringIndex = 0; stringIndex < s.Length; stringIndex++) 
{ 
    sb.Clear(); 
    for (int charIndex = 0; charIndex < str.UpperBound(1); charIndex++) 
    sb.Append(str[stringIndex,charIndex]); 
    s[stringIndex] = sb.ToString(); 
} 

// For the jagged array 
for (int index = 0; index < s.Length; index++) 
    s[index] = new string(str[index]); 
+0

Merci ... Il n'est pas nécessaire pour moi d'utiliser un tableau rectangulaire, donc l'utilisation de StringBuilder est une complexité inutile par rapport au simple basculement vers un tableau irrégulier. Basé sur ceci et vos autres points, j'ai choisi la dernière solution. Merci encore. – sundar

2

En supposant que les dimensions sont fixés comme 2x50:

char[,] str = new char[2,50]; 

// populate str somehow 

// chose which of the strings we want (the 'row' index) 
int strIndex = 0; 
// create a temporary array (faster and less wasteful than using a StringBuilder) 
char[] chars = new chars[50]; 
for (int i = 0; i < 50; i++) 
    chars[i] = str[strIndex, i]; 
string s = new string[chars]; 

Ce serait plus facile et plus performant si vous avez utilisé un tableau en dents de scie:

char[][] str = new char[2][]; 

Ensuite, vous pouvez écrire:

string s = new string(characters[0]); 
1

je serais d'accord avec l'aide d'un tableau en dents de scie.Vous pouvez utiliser cette méthode d'aide pour initialiser un tableau en dents de scie:

static T[][] InitJaggedArray<T>(int dimension1, int dimension2) 
{ 
    T[][] array = new T[dimension1][]; 
    for (int i = 0; i < dimension1; i += 1) 
    { 
     array[i] = new T[dimension2]; 
    } 
    return array; 
} 

Alors

char[,] str = new char[2,50]; 

deviendrait

char[][] str = ArrayHelper.InitJaggedArray<char>(2, 50); 

Vous pouvez ensuite accéder à des éléments en elle comme si

str[0, 10] = 'a'; 

Et pour en faire une chaîne yo u ferait

string s = new string(str[0]); 
0

Vous pouvez le faire avec LINQ:

string[] Convert(char[,] chars) 
{ 
    return Enumerable.Range(0, chars.GetLength(1)) 
        .Select(i => Enumerable.Range(0, chars.GetLength(0)) 
              .Select(j => chars[j, i])) 
        .Select(chars => new string(chars.ToArray()); 
} 
Questions connexes