同时创建和显示多个数组 C#
Creating and Displaying multiple arrays simultaniously C#
我是 C# 和整个编程的新手,我一直无法为我想做的事情想出一个解决方案。我希望能够创建一种方法来显示多个数组,这些数组包含来自三个外部文本文件的元素,每行都有值(例如 @"Files\Column1.txt"、@"Files\Column2.txt" @"Files\Column3.txt")。然后它们需要在命令行中像这样显示:
https://www.dropbox.com/s/0telh1ils201wpy/Untitled.png?dl=0
我还需要能够单独对每一列进行排序(例如,第 3 列从最低到最高)。
我可能已经解释得很糟糕了,但我不知道还能怎么说!任何可能的解决方案将不胜感激!
一种方法是将每个文件中的相应项目存储在 Tuple
中,然后将它们存储在 List
中。这样,项目将全部保持在一起,但您可以在任何 Tuple
字段上对列表进行排序。如果您对这些项目做任何更详细的事情,我建议创建一个简单的 class 来存储它们,这样代码将更易于维护。
类似于:
public class Item
{
public DayOfWeek Day { get; set; }
public DateTime Date { get; set; }
public string Value { get; set; }
}
下面的示例可以很容易地转换为使用这样的 class,但现在它使用 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));
}
我是 C# 和整个编程的新手,我一直无法为我想做的事情想出一个解决方案。我希望能够创建一种方法来显示多个数组,这些数组包含来自三个外部文本文件的元素,每行都有值(例如 @"Files\Column1.txt"、@"Files\Column2.txt" @"Files\Column3.txt")。然后它们需要在命令行中像这样显示:
https://www.dropbox.com/s/0telh1ils201wpy/Untitled.png?dl=0
我还需要能够单独对每一列进行排序(例如,第 3 列从最低到最高)。
我可能已经解释得很糟糕了,但我不知道还能怎么说!任何可能的解决方案将不胜感激!
一种方法是将每个文件中的相应项目存储在 Tuple
中,然后将它们存储在 List
中。这样,项目将全部保持在一起,但您可以在任何 Tuple
字段上对列表进行排序。如果您对这些项目做任何更详细的事情,我建议创建一个简单的 class 来存储它们,这样代码将更易于维护。
类似于:
public class Item
{
public DayOfWeek Day { get; set; }
public DateTime Date { get; set; }
public string Value { get; set; }
}
下面的示例可以很容易地转换为使用这样的 class,但现在它使用 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));
}