拆分字符串,将 ToList<int>() 转换为一行
Posted
技术标签:
【中文标题】拆分字符串,将 ToList<int>() 转换为一行【英文标题】:Split string, convert ToList<int>() in one line 【发布时间】:2010-10-29 01:02:45 【问题描述】:我有一个包含数字的字符串
string sNumbers = "1,2,3,4,5";
我可以将其拆分然后转换为List<int>
sNumbers.Split( new[] ',' ).ToList<int>();
如何将字符串数组转换为整数列表?
这样我就可以将string[]
转换为IEnumerable
【问题讨论】:
我们今天有完全相同的问题:Click me 在“一条线”中是非常强是非常严格的要求! 这个问题专门说要拆分一串数字,这样可以使答案简单。 Dario 提到的问题处理(陷入困境?)一般字符串的 TryParse 问题。 【参考方案1】:var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
【讨论】:
List 有空值或 null 时会出现异常。 @SayedM.Idrees 只是在拆分前检查 null 或空。 添加空检查:var numbers = sNumbers?.Split(',').Select(Int32.Parse).ToList();【参考方案2】:你也可以这样做而不需要 Linq:
List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();
【讨论】:
【参考方案3】:Joze 的方式也需要 LINQ,ToList()
在 System.Linq
命名空间中。
您可以通过将数组传递给 List 构造函数来将 Array 转换为 List 而无需 Linq:
List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
【讨论】:
【参考方案4】:在 Unity3d 上,int.Parse
无法正常工作。所以我像下面这样使用。
List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
new Converter<string, int>((s)=>return Convert.ToInt32(s);) ) );
希望对 Unity3d 用户有所帮助。
【讨论】:
【参考方案5】:你也可以使用这个扩展方法
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(',');
【讨论】:
【参考方案6】:我的问题类似,但有时字符串包含字母(有时为空)带来了不便。
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();
【讨论】:
谢谢,虽然你声明了一个分隔符然后你没有使用它。【参考方案7】:也可以通过int数组直接赋值。
喜欢这个
int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
【讨论】:
【参考方案8】:你可以用这个:
List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();
【讨论】:
欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性 cmets 挤满你的代码,因为这会降低代码和解释的可读性! 函数 ConvertIntoIntList 没有退出。 另外,您需要添加以下类: static public class HelperMethods static public List您可以使用新的 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));
【讨论】:
【参考方案10】:最好使用int.TryParse
来避免异常;
var numbers = sNumbers
.Split(',')
.Where(x => int.TryParse(x, out _))
.Select(int.Parse)
.ToList();
【讨论】:
【参考方案11】:既然我们有泛型,为什么还要坚持使用 int? 像这样的扩展方法呢:
public static List<T> Split<T>(this string @this, char separator, out bool AllConverted)
List<T> returnVals = new List<T>();
AllConverted = true;
var itens = @this.Split(separator);
foreach (var item in itens)
try
returnVals.Add((T)Convert.ChangeType(item, typeof(T)));
catch AllConverted = false;
return returnVals;
然后
string testString = "1, 2, 3, XP, *, 6";
List<int> splited = testString.Split<int>(',', out _);
【讨论】:
以上是关于拆分字符串,将 ToList<int>() 转换为一行的主要内容,如果未能解决你的问题,请参考以下文章