将二维c#数组的内容存储到csv文件中

将二维c#数组的内容存储到csv文件中,c#,arrays,csv,multidimensional-array,C#,Arrays,Csv,Multidimensional Array,我有一个C#数组,我希望从中获取每个元素并将其存储在每个csv单元格中。我编写了以下内容: StreamWriter file = new StreamWriter("C:/mylocation/data.csv"); //my2darray is my 2d array created. for (int i = 0; i < my2darray.GetLength(1); i++) { for (int j=0; j<my2darray.GetLe

我有一个C#数组,我希望从中获取每个元素并将其存储在每个csv单元格中。我编写了以下内容:

StreamWriter file = new StreamWriter("C:/mylocation/data.csv");
//my2darray  is my 2d array created.
for (int i = 0; i < my2darray.GetLength(1); i++)
   {
            for (int j=0; j<my2darray.GetLength(0);j++)
            {
                file.Write(my2darray[i][j]);
                file.Write("\t");
            }
            file.Write("\n"); // go to next line
     }
StreamWriter file=newstreamwriter(“C:/mylocation/data.csv”);
//my2darray是我创建的2d数组。
for(int i=0;i对于(int j=0;j它可以工作。您可能没有使用正确的分隔符。请尝试使用换行符“\r\n”,并使用csv分隔符,如“,”

我将按如下方式编写循环:

  var my2darray = new[,]
  {
    { true, false, false, true },
    { true, false, false, true },
    { true, false, false, true },
    { true, false, false, true },
    { true, false, false, true },
  };

  var iLength = my2darray.GetLength(1);
  var jLength = my2darray.GetLength(0);

  for (int i = 0; i < iLength; i++)
  {
    for (int j = 0; j < jLength; j++)
    {
      file.Write("{0}\t", my2darray[j, i]);
    }
    file.WriteLine();
  }
var my2darray=new[,]
{
{真,假,假,真},
{真,假,假,真},
{真,假,假,真},
{真,假,假,真},
{真,假,假,真},
};
var iLength=my2darray.GetLength(1);
var jLength=my2darray.GetLength(0);
对于(int i=0;i
请注意,当您使用my2darray.GetLength(x)时,数组的类型是arr[,],而不是arr[]

还请注意,如果要在csv文件中转置矩阵,则必须更改i和y:my2darray[j,i]

锯齿形的版本可能是这样的(预计j维i在整个外部数组(i维)中相等):

var my2darray=new[]
{
新[]{true,false,false,true},
新[]{true,false,false,true},
新[]{true,false,false,true},
新[]{true,false,false,true},
新[]{true,false,false,true},
};
var iLength=my2darray.Length;
var jLength=my2darray[0]。长度;
对于(int j=0;j
我得到了一个解决方案,并根据@adv12的提示进行了以下轻微修改

StreamWriter file = new StreamWriter("C:/mylocation/data.csv");
//my2darray  is my 2d array created.
for (int i = 0; i < my2darray.GetLength(1); i++)
  {
        for (int j=0; j<my2darray.GetLength(0);j++)
        {  
            file.Write(my2darray[i,j]);

            //it is comman and not a tab
            file.Write(",");  
        }
        //go to next line
        file.Write("\n"); 

 }
StreamWriter file=newstreamwriter(“C:/mylocation/data.csv”);
//my2darray是我创建的2d数组。
for(int i=0;i对于(int j=0;j我宁愿将CSV表示和保存分开:

private static IEnumerable<String> ToCsv<T>(T[,] data, string separator = ",") {
  for (int i = 0; i < data.GetLength(0); ++i)
    yield return string.Join(separator, Enumerable
      .Range(0, data.GetLength(1))
      .Select(j => data[i, j])); // simplest, we don't expect ',' and '"' in the items
}

您用来查看文件的应用程序是否接受制表符作为分隔符?通常CSV文件使用逗号。(毕竟是“逗号分隔值”)。此外,如果您在Windows上,您可能需要
\r\n
(Windows行结束)而不仅仅是
\n
。要正确地进行行尾处理,而不考虑平台,您可以使用
环境.NewLine
。既然您使用j来迭代数组的第二维度,那么它不应该是my2darray.GetLength(1)在for语句中?还有,什么类型是my2darray?这是字符串数组吗?如果是,请确保在字符串周围加引号(如果字符串可以包含分隔符),然后确保正确转义它们包含的任何引号。如果使用Excel查看结果,可以在导入向导中显式选择分隔符。A另外,
my2darray
是一个矩形数组吗?这就是使用
GetLength(0)
GetLength(1)
所暗示的,但是你访问它的内容就像它是一个锯齿数组一样(
my2darray[i][j]
而不是
my2darray[i,j]
)。此外,我同意@Kevin的观点,即您似乎对数组索引器的顺序不一致。由于
StreamWriter
实现了
IDisposable
(并因此分配资源),请使用
使用(StreamWriter file=new StreamWriter(“C:/mylocation/data.csv”)将其包装成
{…/*您的代码在这里*/…}
private static IEnumerable<String> ToCsv<T>(T[,] data, string separator = ",") {
  for (int i = 0; i < data.GetLength(0); ++i)
    yield return string.Join(separator, Enumerable
      .Range(0, data.GetLength(1))
      .Select(j => data[i, j])); // simplest, we don't expect ',' and '"' in the items
}
File.WriteAllLines(@"C:/mylocation/data.csv",
  ToCsv(my2array));