有没有办法拆分数组中的每个字符串并每次检索第 5 位,加到总数中?

Posted

技术标签:

【中文标题】有没有办法拆分数组中的每个字符串并每次检索第 5 位,加到总数中?【英文标题】:Is there a way to split every string in an array and retrieve the 5th bit each time, adding to a total? 【发布时间】:2019-09-10 13:34:12 【问题描述】:

大家好,抱歉,我对 C# 和一般编程很陌生。

我有一个正在读取的文本文件,其中包含 10 行(除了第一行是相关的)。

我想用逗号分割每一行(除了第一行,因为它只有一个单词),然后检索每行的第 5 行,并将其添加到总数中。

目前我所能做的基本上是拆分并将相同的值添加到总数中 10 次,而不是将 9 个不同的值加在一起,或者面临“System.IndexOutOfRangeException”。

            int totalValues = 0;

            string[] larray = lines.ToArray(); //create array from list
            string vehicleValue;

            for (int i = 0; i < larray.Length; i++)
            
                string[] bits = larray[i].Split(','); 
                vehicleValue = bits[4];
                int vvint = int.Parse(vehicleValue);
                totalValues = totalValues + vvint; 
            
            totalValue.Text = totalValues.ToString(); 

就目前而言,上述代码导致“System.IndexOutOfRangeException”突出显示“vehicleValue = bits [4];”

文件的每一行都是这样的,除了第一行。

Car,Ford,GT40,1964,250000,987,Red,A1,2,4,FALSE

我想从这一特定行中得到的值是“250000”——第 5 个。我正在尝试从每一行中获得第 5 个。

【问题讨论】:

bits[4] 是数组中的第五个项目,因为索引从零开始,要获得第四个项目你应该得到bits[3] 如果需要跳过第一个,您可能希望从 1 开始循环?错误发生在哪一行,意思是i的值是什么,lines[i]是什么? 【参考方案1】:

您的问题是您还试图解析第一行(其中不包含足够的条目,因此您会遇到异常)。您可以通过从索引 1 开始迭代来跳过第一行:

        int totalValues = 0;

        string[] larray = lines.ToArray(); //create array from list
        string vehicleValue;

        for (int i = 1; i < larray.Length; i++)
        
            string[] bits = larray[i].Split(','); 
            vehicleValue = bits[4];
            int vvint = int.Parse(vehicleValue);
            totalValues = totalValues + vvint; 
        
        totalValue.Text = totalValues.ToString(); 

【讨论】:

顺便说一句,用Linq,可能写成var totalValues = lines.Skip(1).Sum(line =&gt; var bits = line.Split(','); var vehicleValue = bits[4]; var vvint = int.Parse(vehicleValue); return vvint; ); totalValue.Text = totalValues.ToString();。根据偏好,它可以进一步压缩,所以整个代码类似于totalValue.Text = lines.Skip(1).Sum(x =&gt; int.Parse(x.Split(',')[4])).ToString();【参考方案2】:

bits[4] 是数组中的第五项,因为索引从零开始,要获得第四项,您应该得到bits[3]

int totalValues = 0;

string[] larray = lines.ToArray(); //create array from list
string vehicleValue;

for (int i = 0; i < larray.Length; i++)

    string[] bits = larray[i].Split(','); 
    vehicleValue = bits[3];
    int vvint = int.Parse(bits[3]);
    totalValues = totalValues + vvint; 

totalValue.Text = totalValues.ToString(); 

【讨论】:

他说他确实想要第五件。 问题中的错字,现在已修复。对不起!

以上是关于有没有办法拆分数组中的每个字符串并每次检索第 5 位,加到总数中?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法用数组构造一个 Firestore 字段(同名)并显示 TableView 中每个字段的每个数组元素

如何拆分camelCase字符串并检查每个拆分词是不是是数组的一部分?

如何在执行 10 倍交叉验证时在每次拆分时获得 Lasso Regression 中的系数?

将 SQL Server 中的字符串拆分为最大长度,并将每个字符串作为一行返回

c# 字符串拆分和合并

java - 拆分字符串后,数组中的第一个元素是啥?