同时创建和显示多个数组C#

时间:2015-03-24 19:52:30

标签: c# arrays multidimensional-array

我是C#的新手并且整体编程,我一直无法找到我想要做的事情的解决方案。我希望能够创建一种方法来显示包含三个外部文本文件中元素的多个数组,每行包含值(例如@" Files \ Column1.txt",@" Files \ Column2。 txt" @" Files \ Column3.txt")。然后需要在命令行中显示它们:

https://www.dropbox.com/s/0telh1ils201wpy/Untitled.png?dl=0

我还需要能够单独对每列进行排序(例如,第3列从最低到最高)。

我可能已经解释过这个可怕的但我不确定怎么说呢!任何可能的解决方案将不胜感激!

1 个答案:

答案 0 :(得分:0)

一种方法是将每个文件中的相应项目存储在Tuple中,然后将其存储在List中。这样项目将全部保持在一起,但您可以在任何Tuple字段上对列表进行排序。如果您正在使用这些项目做更详细的事情,我建议创建一个简单的类来存储它们,这样代码就更易于维护。

类似的东西:

public class Item
{
    public DayOfWeek Day { get; set; }
    public DateTime Date { get; set; }
    public string Value { get; set; }
}

下面的示例可以很容易地转换为使用这样的类,但是现在它使用Tuple<string, string, string>。作为中间步骤,您可以在创建Tuple时轻松转换项目,以获得更强类型的版本,例如,您可以拥有Tuple<DayOfWeek, DateTime, string>

以下是将文件项目读入列表的示例代码,以及如何对每种项目类型进行排序:

public static void Main()
{
    // For testing sake, I created some dummy files
    var file1 = @"D:\Public\Temp\File1.txt";
    var file2 = @"D:\Public\Temp\File2.txt";
    var file3 = @"D:\Public\Temp\File3.txt";

    // Validation that files exist and have same number 
    // of items is intentionally left out for the example

    // Read the contents of each file into a separate variable
    var days = File.ReadAllLines(file1);
    var dates = File.ReadAllLines(file2);
    var values = File.ReadAllLines(file3);

    var itemCount = days.Length;

    // The list of items read from each file
    var fileItems = new List<Tuple<string, string, string>>();

    // Add a new item for each line in each file
    for (int i = 0; i < itemCount; i++)
    {
        fileItems.Add(new Tuple<string, string, string>(
            days[i], dates[i], values[i]));
    }

    // Display the items in console window
    fileItems.ForEach(item =>
        Console.WriteLine("{0} {1} = {2}",
            item.Item1, item.Item2, item.Item3));

    // Example for how to order the items:

    // By days
    fileItems = fileItems.OrderBy(item => item.Item1).ToList();

    // By dates
    fileItems = fileItems.OrderBy(item => item.Item2).ToList();

    // By values
    fileItems = fileItems.OrderBy(item => item.Item3).ToList();

    // Order by descending
    fileItems = fileItems.OrderByDescending(item => item.Item1).ToList();

    // Show the values based on the last ordering
    fileItems.ForEach(item =>
        Console.WriteLine("{0} {1} = {2}",
            item.Item1, item.Item2, item.Item3));
}