将逗号分隔的字符串转换为int[]最简单的方法是什么?

45

我有一个逗号分隔的字符串,如1,5,7,那么将这个字符串转换成int[]数组的最简单和本地化的方法是什么?我可以编写自己的拆分函数,但有些人想知道如何以最本地化的方式来实现。

3个回答

112
string s = "1,5,7";
int[] nums = Array.ConvertAll(s.Split(','), int.Parse);

或者,一个类似于 LINQ 的版本:

int[] nums = s.Split(',').Select(int.Parse).ToArray();

但第一个应该稍微快一点。


6
哇,每天都有新的学习... o_o - Nahydrin
1
为什么第一个更快? - Yola
2
@Yola:因为Array.ConvertAll知道输出的大小,而LINQ的ToArray()函数必须在不知道预先计数的情况下收集结果。 - Ben Voigt
但一百万个字符只相当于50 MB的内存? - stephanmg
2
@stephanmg:100万个字符大约是2MB的内存,这对于今天的计算机来说不是问题。你所说的“非常大”的例子实际上并不算很大。当你接近10亿个字符时,“Split”方法将开始成为一个问题。(作为背景,圣经大约有300万个字符,可以轻松在内存中处理。《大英百科全书》有4400万个单词,因此有数亿个字符,但仍然可以在内存中处理,但开始接近极限。一整个图书馆书架上的每本书都太多了。) - Ben Voigt
显示剩余7条评论

10
string numbers = "1,5,7";
string[] pieces = numbers.Split(new string[] { "," },
                                  StringSplitOptions.None);

int[] array2 = new int[pieces.length];

for(int i=0; i<pieces.length; i++)
    array2[i] = Convert.ToInt32(pieces[i]);

为什么新的string[] { "," }?numbers.Split(",")不够吗? - stephanmg
@stephanmg: numbers.Split() 默认以单个字符作为分隔符。因此,如果要传递单个逗号作为分隔符,你需要将其作为字符传递,例如 numbers.Split(',');。然而,如果你想要传递一个字符串作为分隔符,比如逗号后面跟着一个空格,那么你需要使用一个字符串数组。因此,使用了 new string[] {}。例如,numbers.Split(new string[] {", "}, StringSplitOptions.None); - undefined

7

请看这里。

string numbers = "1,5,7";
List<int> numlist = new List<int>();

foreach (string number in numbers.Split(','))
    numlist.Add(Int32.Parse(number));

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