c# - 将一个数组拆分为两个并行数组或在 C# 中直接读入两个数组

标签 c# arrays

在我的 C# 类(class)中,为我当前的作业(控制台程序)提供了以下数据文件:

Combine,  1500.00
Oxen,    195.00
Mule,  200.00
Tractor,  4000.00
Truck,  12150.00
Trailer,  475.00

当然,空格是文件的一部分。我无法以任何方式保存或更改数据文件。

我需要将其作为二维数组(或两个并行数组)读入,然后根据用户输入对数组进行搜索。该程序应该能够接受以下用户输入:

设备名称、起始值、折旧年限和(如果数组中没有)残值。如果该装备没有出现在数组中,我会将其视为一件新装备,如果再次输入该装备,则不必输入残值。

获得所有用户输入后,我将输出年份和每年的折旧值。该程序还需要一个用于用户输入、输出和退出的菜单。

我们仅在星期三讨论了在数组中搜索的示例;期末考试和这项作业都在星期一截止。我一直在搜索这个网站,连续八个小时阅读了三种不同的文本,试图理解我在做什么,但我根本不明白(类只有八个人的分数高于 70%,所以我比大多数人做得更好,但仍然)。

这是我到目前为止编写的代码。今天我只是想在适当的地方得到一个合适的二维数组。我的问题是,我是否正确地实现了一个二维数组,如果是这样,我如何从上面显示的文件中相互独立地引用每件设备和残值?

public static void GetArrayFromFile()
{
    StreamReader equipmentFile = new StreamReader("SalvageData.TXT");
    string[,] salvageFileArray = new string[1, 6];
    for (int indexCounterA = 0; indexCounterA < 6; indexCounterA++)
    {
        if (equipmentFile.Peek() != -1)
        {
            for (int indexCounterB = 0; indexCounterB < 6; indexCounterB++)
            {
                if (equipmentFile.Peek() != -1)
                {
                    salvageFileArray[indexCounterA, indexCounterB] = equipmentFile.ReadLine();
                }
                else
                {
                    break;
                }
            }
        }
        else
        {
            break;
        }
    }
}

我对最后一项作业感到非常困惑。我不知道如何进行。请,如果有人可以帮助我...插话。

哦,是的:没有列表对象,没有字符对象,没有正则表达式。这是基础入门类(class);我们没有涵盖其中的任何内容,也可能不会使用它们。

我真的,真的需要一些帮助。正如我所说,我还需要搜索数组并比较用户输入,所以如果有人知道任何好的“从 CSV 文件读入数组然后用它做一些数学运算”资源,我'我也很感激被指出这一点。

提前致谢,如果我一次重复几个问答问题,我深表歉意。

最佳答案

这是一个有趣的话题,通常家庭作业不受欢迎,但我会帮助您指明正确的方向,因为您并没有直接要求代码。

首先,您想从文件中获取一个数组,因此您需要创建一个函数来执行此操作并返回一个数组。这使得你的函数原型(prototype)变成了

public string[,] GetArrayFromFile(string fileName)

注意我们是如何返回二维数组的。所以现在你想读入文件,但你想把它分成条目数。您想尝试在不对数组中的元素数量进行硬编码的情况下执行此操作,因为这需要输入文件的先验知识(不确定是否允许您这样做)。

那么,让我们从一步读取整个文件开始:

public string[,] GetArrayFromFile(string fileName)
{
    string[] fileData = File.ReadAllLines(fileName);
}

现在我们知道了数组的第一维,也就是行数,第二维是2,因为每行有2个元素。所以我们可以创建结果数组:

public string[,] GetArrayFromFile(string fileName)
{
    string[] fileData = File.ReadAllLines(fileName);

    string[,] result = new string[fileData.Length, 2];
}

唯一剩下的就是将 fileData 拆分为每个元素的单独部分,因此我们必须使用 for 循环(可以用 完成) foreach,但我怀疑这可能是一个“高级”主题)。

public string[,] GetArrayFromFile(string fileName)
{
    string[] fileData = File.ReadAllLines(fileName);

    string[,] result = new string[fileData.Length, 2];

    for (int i = 0; i < fileData.Length;i++)
    {
        string[] parts = fileData[i].Split(',');
        result[i, 0] = parts[0];
        result[i, 1] = parts[1];  //Probably want to .Trim() here
    }

    return result;
}

这现在成为您从文件中获取数组的全部功能,无需使用硬编码的“魔数(Magic Number)”。

要使用它,从调用函数调用 GetArrayFromFile,传入输入文件的文件名并将结果存储在变量中。然后数组包含第一个维度作为行索引,第二个维度是数据。要搜索,请循环遍历第一个索引并检查设备类型的第二个索引。一旦找到它,您就可以查看残值(可能想将其转换为整数以进行比较)。

关于c# - 将一个数组拆分为两个并行数组或在 C# 中直接读入两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34344857/

相关文章:

Java 对多个字符串执行相同的操作

php - 简单的日期明智排序数组不起作用

python - 旋转数组 - 并随后对其进行操作

使用 qsort 对 C 数组进行排序?

javascript - JavaScript 中 Array.apply 的第一个参数是什么?

c# - Automapper 单元测试失败

c# - 单例实例

c# - Windows 中的重点应用程序更改事件

c# - ZipFile 弄乱了汉字

c# - 如何使用 C# 中的 QBO API v3 将付款应用于发票?