输出这样的数据的最佳方法是什么?我觉得一个例子会比言语更好地解释。
如果我有这样的数据
Array1 Array2 Array3 Array4
A 0 10 100
A 1 11 101
C 2 12 102
B 3 13 103
A 4 14 104
C 5 15 105
B 6 16 106
C 7 17 107
C 8 18 108
B 9 19 109
我希望它输出到文件
档案A
0 10 100
1 11 101
4 14 104
档案B
3 13 103
6 16 106
9 19 109
档案C
2 12 102
5 15 105
7 17 107
8 18 108
Array1中可以有一些不同的元素。因此,如果有X个不同的元素,我需要创建X文件。
数组是字符串数组。它们具有相同数量的元素。
我将尝试用文字解释我想要做什么:我想选择一个数组,在本例中是Array1,获取Array1中的所有不同元素,为Array1中的每个不同元素创建一个CSV文件distinct元素作为文件名,在文件内包含来自其他数组的所有数据。
最好的方法是什么?
答案 0 :(得分:0)
使用适当结构的数组或使用多维数组会更容易,但使用的是...
您可以“压缩”数组
var bigArray = Array1.Zip(Array2, (a1, a2) => new {a1, a2})
.Zip(Array3, (a12, a3) => new {a12.a1, a12.a2, a3})
.Zip(Array4, (a123, a4) => new {a123.a1, a123.a2, a123.a3, a4})
然后按第一个数组中的值分组:
var query = bigArray.GroupBy(a => a.a1);
然后循环中的“输出”:
foreach(var file in query)
{
Console.WriteLine("File {0}", file.Key);
foreach(var item in file)
Console.WriteLine("{0} {1} {2}", item.a2, item.a3, item.a4);
}
答案 1 :(得分:0)
假设您有四个数组,每个数组的元素数完全相同:
string[] Array1;
string[] Array2;
string[] Array3;
string[] Array4;
第一步是从数组中创建匿名类型,然后按第一个数组的值对对象进行分组:
var query = from i in Enumerable.Range(0, Array1.Length)
select new {
FileName = Array1[i],
Value1 = Array2[i],
Value2 = Array3[i],
Value3 = Array4[i]
} into x
group x by x.FileName into g
select g;
使用此查询,您可以将数据保存到文件:
foreach(var group in query)
{
using (var writer = File.CreateText(group.FileName))
{
foreach(var item in group)
writer.WriteLine(String.Format("{0} {1} {2}",
item.Value1, item.Value2, item.Value3));
}
}
注意:如果您有相关数据 - 例如Array1中的第二项与Array2中的第二项相关,并且两者都与Array3中的第二项相关,那么最好有单个数组结构数组,它们将所有相关项保存在一起。当然,为变量提供有价值的名称。