拆分字符串,将ToList <int>()转换为一行


191

我有一个带数字的字符串

string sNumbers = "1,2,3,4,5";

我可以将其拆分然后转换为 List<int>

sNumbers.Split( new[] { ',' } ).ToList<int>();

如何将字符串数组转换为整数列表?这样我就可以转换string[]IEnumerable


今天我们有完全相同的问题:点击我
达里奥,2009年

3
在“一行”中,一个非常强的要求是非常严格的!</ perl>
dfa

2
这个问题专门说要分割一串数字,这使答案很简单。达里奥(Dario)提到的问题处理(解析陷入了吗?)普通字符串的TryParse问题。
goodeye

Answers:



31

您也可以通过这种方式进行操作,而无需Linq:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();

18

Joze的方式也需要LINQ,ToList()System.Linq命名空间中。

您可以通过将数组传递给List构造函数,而无需Linq将Array转换为List:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

17

更好地使用int.TryParse以避免异常;

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();


4

您也可以使用此扩展方法

public static List<int> SplitToIntList(this string list, char separator = ',')
{
    return list.Split(separator).Select(Int32.Parse).ToList();
}

用法:

var numberListString = "1, 2, 3, 4";
List<int> numberList = numberListString.SplitToIntList(',');

3

在Unity3d上,int.Parse效果不佳。所以我像波纹管一样使用。

List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
 new Converter<string, int>((s)=>{return Convert.ToInt32(s);}) ) );

希望对Unity3d用户有帮助。


3

您可以使用新的C#6.0语言功能:

  • (s) => { return Convert.ToInt32(s); }用相应的方法组替换委托Convert.ToInt32
  • 用以下内容替换冗余的构造函数调用new Converter<string, int>(Convert.ToInt32)Convert.ToInt32

结果将是:

var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32));

2

我的问题是类似的,但不便之处在于有时字符串包含字母(有时为空)。

string sNumbers = "1,2,hh,3,4,x,5";

尝试遵循Pcode Xonos扩展方法:

public static List<int> SplitToIntList(this string list, char separator = ',')
{
      int result = 0;
      return (from s in list.Split(',')
              let isint = int.TryParse(s, out result)
              let val = result
              where isint
              select val).ToList(); 
}

1
谢谢,尽管您声明了一个分隔符,然后您没有使用它。
雨果·德辛

-2

您可以使用此:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();

2
欢迎使用Stack Overflow!尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。也请尽量不要在代码中加入解释性注释,因为这会降低代码和解释的可读性!
再见StackExchange,

2
函数ConvertIntoIntList不会退出。
Federico Navarrete

另外,您需要添加以下类:静态公共类HelperMethods {静态公共List <int> ConvertIntoIntList(this string [] stringList){int x = 0; var intList = stringList.Where(str => int.TryParse(str,out x)).Select(str => x).ToList(); 返回intList; }
费德里科·纳瓦雷特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.