[英]How to convert this string to an array of integers?
我有string s = "158,141,90,86";
如何将它们转换为int []?
int[] result = "158,141,90,86".Split(',').Select(int.Parse).ToArray();
像这样,使用LINQ:
int[] array = s.Split(',')
.Select(x => int.Parse(x))
.ToArray();
请注意,如果文本的任何元素不是整数,则将引发异常。 如果要使其更具弹性(例如,如果这是用户输入的数据),则需要使用int.TryParse
; 那时,就LINQ查询而言,生活变得更加复杂。
编辑:要使其解析为int?[]
(具有与每个无效子字符串相对应的null值),您可以执行以下操作:
int?[] array = s.Split(',')
.Select(x => {
int value;
return int.TryParse(x, out value) ? value : (int?)null;
})
.ToArray();
就像我说的那样,这不是很好:
编辑:在评论中,丹评论了对上述方法的“痴迷”,而不是(大概)一种更必要的方法。 在我看来,即使是较不愉快的第二个版本,也比命令性替代版本更易于阅读。 丑陋仅仅是由于int.TryParse
的丑陋特性,在命令式代码中使用时同样丑陋。
如果int.TryParse
要么返回int?
或Tuple<bool, int>
那么它将与第一个版本一样简单。 即使从元组形式转换为可为空的形式也将很简单,并带有一个额外的投影:
int[] array = s.Split(',')
.Select(x => int.TryParseTuple(x))
.Select(tuple => tuple.First ? tuple.Second : (int?) null)
.ToArray();
当务之急的解决方案当然是:
string[] sa = s.Split(',');
int?[] array = new int?[sa.Length];
int value;
for (int i = 0; i < sa.Length; i++)
if (int.TryParse(sa[i], out value))
array[i] = value;
else
array[i] = null;
LINQ / int?[]的另一种解决方案是:
return source.Split(',')
.Select(x => {
int? value = null;
int parsed;
if (int.TryParse(x, out parsed)) {
value = parsed;
}
return value;
})
.ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.