2010-03-03 7 views
7

Existe-t-il un moyen de convertir des tableaux de chaînes en tableaux int aussi simple que l'analyse d'une chaîne en un int en C#.C# chaîne [] à int []

int a = int.Parse(”123”); 
int[] a = int.Parse(”123,456”.Split(’,’)); // this don't work. 

J'ai essayé d'utiliser des méthodes d'extension pour la classe int pour ajouter cette fonctionnalité moi, mais ils ne deviennent pas statiques.

Une idée sur la façon de le faire vite et bien?

+1

LINQ devrait vous permettre de le faire en une seule ligne. Ou expressions lambda. –

+2

Avez-vous essayé de faire une recherche sur ce site avant de le demander? –

Répondre

17

Cette requête LINQ devrait le faire:

strArray.Select(s => int.Parse(s)).ToArray() 
8
int[] a = Array.ConvertAll("123,456".Split(','), s => Int32.Parse(s)); 

devrait faire très bien. Vous pouvez modifier le lambda pour utiliser TryParse si vous ne voulez pas d'exceptions.

+1

'Array.ConvertAll' nécessite certainement moins de réallocations que LINQy' ToArray() '. Notez que dans ce cas, vous n'avez même pas besoin d'un lambda, vous pouvez passer 'Int32.Parse' comme second paramètre de' ConvertAll'. –

3
”123,456”.Split(’,’).Select(s => int.Parse(s)).ToArray(); 
6
int[] a = "123,456".Split(’,’).Select(s => int.Parse(s)).ToArray(); 
3

Utilisez ceci:

"123,456".Split(',').Select(s => int.Parse(s)).ToArray() 
3

Je pense, comme ça:

string[] sArr = { "1", "2", "3", "4" }; 
int[] res = sArr.Select(s => int.Parse(s)).ToArray(); 
2

Voici la méthode d'extension. Ceci est fait sur une chaîne, car vous ne pouvez pas ajouter une fonction statique à une chaîne.

public static int[] ToIntArray(this string value) 
{ 
    return value.Split(',') 
     .Select<string, int>(s => int.Parse(s)) 
     .ToArray<int>(); 
} 

Voici comment utiliser

string testValue = "123, 456,789"; 

int[] testArray = testValue.ToIntArray(); 

Cela suppose que vous voulez partager sur « » sinon vous devez changer la ToIntArray

+2

Très génial, juste ce que je cherchais. Merci! –