将列表中的元素从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;
}

将列表中的元素从string类型转换为int类型

这样可能更好:

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);