将列表中的元素从string类型转换为int类型
本文关键字:类型转换 int 类型 string 列表 元素 | 更新日期: 2023-09-27 18:03:24
我正在从一个看起来像这样的电子表格中读取整数数据:
40 50 60 70 80
我可能做错了(这就是我问的原因),但我正在读取数据作为字符串,然后在选项卡上分裂,这样我就可以创建一个数组并访问元素来做进一步的计算,但我最终不得不转换回一个int (int x = Int32.Parse(next);)
来做任何操作。我知道的足够多了,我知道这整件事似乎效率很低。有什么建议来串流这里的东西吗?
StreamReader stRead = new StreamReader(@"TestData.txt");
{
while (!stRead.EndOfStream)
{
listBox1.Items.Add(stRead.ReadLine());
}
string test = (string)listBox1.Items[5];
string[] words = test.Split(''t');
string next = words[2];
int x = Int32.Parse(next);
int y = x * x;
}
这样可能更好:
int y =
File
.ReadAllLines(@"TestData.txt")
.Skip(5)
.Select(x => int.Parse(x.Split(''t')[2]))
.Select(x => x * x)
.First();
但我怀疑你需要它更健壮。让我们知道实际的数据结构是什么
我猜你不能做真正的性能改进,但你可能能够摆脱一些不必要的局部变量。
,
List<int> intList = ((string)listBox1.Items[5]).Split(''t').Select(Int32.Parse).ToList();
如果你真的不需要ListBox, DataTable是处理如此大量数据的另一个选择。您可以创建所需数量的Int32类型的列。
DataTable dt = new DataTable();
var lines = File.ReadAllLines(pathToFile);
dt.Columns.AddRange(lines.First().Split(''t').Select(col => new DataColumn(){DataType = typeof(Int32)}).ToArray());
lines.Select(x => x.Split(''t')).ToList().ForEach(row => dt.Rows.Add(row));
或者你可以使用ForEach
,我已经改变了你的初始代码只是为了说明这个概念
List<int> values = new List<int>();
str.Split(''t').ToList().ForEach(i =>
values.Add(Int32.Parse(i)));
可以使用传递函数参数的Select
方法
var str = "40't50't60't70't80";
var ints = str.Split(''t').ToList().Select(int.Parse);