如何将此数字字符串列表添加到整数类列表中
本文关键字:列表 添加 整数 字符串 数字 数字字符 | 更新日期: 2023-09-27 18:20:31
希望标题有意义。
我正在从保存为单个字符串的逗号分隔整数列表创建报告,格式如下:
2, 3, 5
我已将它们拆分为一个字符串数字数组,现在想将它们添加到包含 Int32 值的模型中,以便我可以与另一个类中保存的数据进行比较。
private class multiValues
{
private Int32 val { get; set; }
}
private class setMultiValues : List<multiValues>
{
}
我希望可以使用简单的 for 循环来完成,但我无法将字符串解析为类的 int。
String[] test = answers.First().multi_choice.Split(',');
List<setMultiValues> multis = new List<setMultiValues>();
for (var i = 0; i <= test.Length; i++)
{
multis.Add(Int32.Parse(test[i].ToString()));
}
这只是在将字符串添加到模型类之前将字符串解析为整数列表的情况,还是有不那么笨拙的方法?
LINQ 使这变得容易得多:
var numbers = answers.First().multi_choice.Split(',').Select(x => Int32.Parse(x)).ToList()
然后,您可以将列表添加到模型中。
更新:
LINQ 中的Select
很像 SQL 中的SELECT
或函数式语言中的map
。它需要一个项目列表和一个函数来依次应用于每个项目。在您的情况下,您有一个字符串列表和一个解析函数,该函数接受字符串并返回整数(或失败!
LINQ 是在 C# 中操作数据的首选方法,当操作没有副作用时。它更紧凑,不依赖于集合的实现细节。
你正在做所有正确的事情,但只是让它们变得过于复杂
你根本不需要多值
String[] test = answers.First().multi_choice.Split(',');
List<int> multis = new List<int>();
foreach (var s in test )
{
multis.Add(int.Parse(s);
}
或简化
var multis = from s in answers.First().multi_choice.Split(',')
select int.Parse(s);
甚至
var multis = from a in answers
select new {Answer=a,Values= from s in a.multi_choice.Split(',')
select int.Parse(s)
};
这将创建一个未命名的类型,该类型是答案和所有 int 值的列表
我怎么知道 - 没有办法做到这一点不那么黑客,但你可以通过 LINQ 简化它
我认为它应该看起来像这样:
var test = answers.First().multi_choice.Split(',').Select(x => int.Parse(x)).ToArray();
List<setMultiValues> multis = new List<setMultiValues>();
multis.AddRange(test);
你可以这样做:
List<setMultiValues> result = answers.First().multi_choice.Split(',').Select(x => Int32.Parse(x)).ToList<setMultiValues>()