从数组输出distinct元素,从其他关联数组输出数据

时间:2014-01-27 14:42:41

标签: c# arrays sorting

输出这样的数据的最佳方法是什么?我觉得一个例子会比言语更好地解释。

如果我有这样的数据

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元素作为文件名,在文件内包含来自其他数组的所有数据。

最好的方法是什么?

2 个答案:

答案 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中的第二项相关,那么最好有单个数组结构数组,它们将所有相关项保存在一起。当然,为变量提供有价值的名称。