C#从数组中移除字符串

8

如何从数组中删除任何字符串并仅保留整数

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

我有

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

I want

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

我尝试了

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

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

但是在第一个元素之前有一个逗号,有没有更好的方法来删除字符串?
3个回答

12

这选择所有可以解析为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();

我对此不太了解,所以从效率角度来看,这种方法比正则表达式方法更好吗? - Sean83
谢谢,运行良好,SO系统设计等待5分钟才能接受您的答案。 - Shaiju T
@Sean83 在这种情况下,与正则表达式相比,它应该更快。 - 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"

我只需要一个数组中的整数,这个答案可能会帮助未来的某个人。谢谢。 - Shaiju T

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
动态使用当值的数据类型不干净时,但在这种情况下,如果我们使用字符串数组,则结果将相同。 - AmanMiddha
如果不需要,永远不要使用“dynamic”。在这种情况下,您必须使用“string”(即使它可以与dynamic一起使用...) - Bidou
好的,谢谢。但是当我不知道动态数组中会有哪种类型的数据时,我该怎么办? - AmanMiddha
如果您有任何与此相关的想法或示例,对我来说会非常有帮助。 - AmanMiddha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接