2016-11-16 3 views
6

Как я могу удалить все строки из массива и имеют только целые числа вместоC# удалить строки из массива

string[] result = col["uncheckedFoods"].Split(','); 

У меня есть

[0] = on;  // remove this string 
[1] = 22; 
[2] = 23; 
[3] = off;  // remove this string 
[4] = 24; 

Я хочу

[0] = 22; 
[1] = 23; 
[2] = 24; 

Я попытался

var commaSepratedID = string.Join(",", result); 

var data = Regex.Replace(commaSepratedID, "[^,0-9]+", string.Empty); 

Но есть запятая перед первым элементом, есть ли лучший способ удалить строки?

ответ

10

Это выбирает все строки, которые могут быть анализируемые как int

string[] result = new string[5]; 
result[0] = "on";  // remove this string 
result[1] = "22"; 
result[2] = "23"; 
result[3] = "off";  // remove this string 
result[4] = "24"; 
int temp; 
result = result.Where(x => int.TryParse(x, out temp)).ToArray(); 
+0

Я мало знаю об этом, так это лучше, чем метод regex с точки зрения эффективности? – Sean83

+0

Спасибо, отлично работает, система SO рассчитана на 5 минут, чтобы принять ваш ответ. – stom

+0

@ Sean83 в этом случае он должен быть быстрее по сравнению с RegEx – fubo

0

также поддерживать double я бы сделать что-то вроде этого:

public static bool IsNumeric(string input, NumberStyles numberStyle) 
{ 
    double temp; 
    return Double.TryParse(input, numberStyle, CultureInfo.CurrentCulture, out temp); 
} 

, а затем

string[] result = new string[] {"abc", "10", "4.1" }; 
var res = result.Where(b => IsNumeric(b, NumberStyles.Number)); 
// res contains "10" and "4.1" 
+0

Мне нужны целые числа из массива, это ответы могут помочь кому-то в будущем. Спасибо. – stom

0

Попробуйте это

dynamic[] result = { "23", "RT", "43", "67", "gf", "43" }; 

       for(int i=1;i<=result.Count();i++) 
       { 
        var getvalue = result[i]; 
        int num; 
        if (int.TryParse(getvalue, out num)) 
        { 
         Console.Write(num); 
         Console.ReadLine(); 
         // It's a number! 
        } 
       } 
+1

Почему динамический тип? Какова польза от вашего ответа по принятому? – Bidou

+0

динамическое использование, когда значения типа данных не чисты, но в этом случае, если мы используем массив String, результат будет таким же. – AmanMiddha

+0

Никогда не используйте 'dynamic', если это не нужно. В этом случае вы должны использовать 'string' (даже если он работает с динамическим ...) – Bidou