簡體   English   中英

在C#中復制2D數組

[英]Copy 2D Array in C#

我有一個將數據存儲到臨時數組的代碼。

string filename = openFileDialog1.FileName;
string[] line = File.ReadAllLines(filename);
using (var reader2 = File.OpenText(@filename))
{
    for (int i = 0; i < line.Length; i++)
    {
        string lines = reader2.ReadLine();
        var data = lines.Split(',');
        double[,] arrayTemp = new double[line.Length, 2];
        arrayTemp[i, 0] = double.Parse(data[0]);
        arrayTemp[i, 1] = double.Parse(data[1]);
    }
    Array.Copy(arrayTemp, GlobalDataClass.dDataArray, line.Length); //error the name "arrayTemp" does not exist in the current context.
} 

由於2d數組不可調整大小,並且我希望全局數組靈活,因此我使用Array.Copy方法將臨時數組復制到Global類數組。 但是我在上面的代碼中注釋了一個錯誤。

我的問題是如何將tempArray復制到全局類數組。 任何想法如何解決這個問題?

問題:您已在for循環內聲明了數組變量arrayTemp ,但在其外部不可用。

解決方案:您需要將數組變量arrayTemp聲明arrayTemp循環。

嘗試這個:

 string filename = openFileDialog1.FileName;
 string[] line = File.ReadAllLines(filename);
 double arrayTemp=new double[line.Length,2];//declare outside forloop so it available after forloop.
 GlobalDataClass.dDataArray=new double[line.Length,2]; //add this line
 using (var reader2 = File.OpenText(@filename))
 {
   for (int i = 0; i < line.Length; i++)
   {
     string lines = reader2.ReadLine();
     var data = lines.Split(',');         
     GlobalDataClass.dDataArray[i, 0] = double.Parse(data[0]);
     GlobalDataClass.dDataArray[i, 1] = double.Parse(data[1]);
   }
    Array.Copy(arrayTemp, GlobalDataClass.dDataArray, line.Length); 
 }

tempArray超出的范圍 ,你Array.Copy ,因為它是你的for循環,你需要將它移動到你的方法調用的范圍,所以,方法可以訪問它里面。 (類似於在其他地方聲明GlobalDataClass.dDataArray方式)

//Array is now declared in an accessible scop
double[,] arrayTemp;
string filename = openFileDialog1.FileName;
string[] line = File.ReadAllLines(filename);
using (var reader2 = File.OpenText(@filename))
{
    for (int i = 0; i < line.Length; i++)
    {
        string lines = reader2.ReadLine();
        arrayTemp = new double[line.Length, 2];
        var data = lines.Split(',');
        GlobalDataClass.dDataArray[i, 0] = double.Parse(data[0]);
        GlobalDataClass.dDataArray[i, 1] = double.Parse(data[1]);
    }
    Array.Copy(arrayTemp, GlobalDataClass.dDataArray, line.Length); //error the name "arrayTemp" does not exist in the current context.
} 

{}層次結構中“更深”的語句只能由其中的語句以及其中的其他子作用域訪問。 原始括號之外的父范圍無法訪問變量。

編輯:

似乎您正在嘗試將arrayTemp的內容復制到GlobalDataClass.dDataArray ,但是您正在將值分配給GlobalDataClass.dDataArray ,並且試圖將空的arrayTemp復制到GlobalDataClass.dDataArray

因此,首先在for循環外聲明tempArray ,然后相應地在for循環內填充tempArray而不是GlobalDataClass.dDataArray

string filename = openFileDialog1.FileName;
string[] line = File.ReadAllLines(filename);

var arrayTemp = new double[line.Length, 2];

using (var reader2 = File.OpenText(@filename))
{
    for (int i = 0; i < line.Length; i++)
    {
        string lines = reader2.ReadLine();
        var data = lines.Split(',');
        arrayTemp[i, 0] = double.Parse(data[0]);
        arrayTemp[i, 1] = double.Parse(data[1]);
    }
    Array.Copy(arrayTemp, GlobalDataClass.dDataArray, line.Length); // now the error should go away.
}

編輯2:

您無需在using()子句中第二次讀取文件。

現在,請嘗試以下操作:

string filename = openFileDialog1.FileName;
string[] line = File.ReadAllLines(filename);

var arrayTemp = new double[line.Length, 2];

for (int i = 0; i < line.Length; i++)
{
    var data = line[i].Split(',');
    arrayTemp[i, 0] = double.Parse(data[0]);
    arrayTemp[i, 1] = double.Parse(data[1]);
}
Array.Copy(arrayTemp, GlobalDataClass.dDataArray, line.Length); // now the error should go away.

看起來您的數組超出范圍,因為它在for循環內聲明,並且您試圖在for循環外訪問它

我已經在此鏈接上回答了

要將數組復制到另一個數組,只需使用“ Clone()”函數,如下所示:

這是您的陣列清單

object newArray = new object [row, column];

當創建另一個數組時,只需使用以下代碼:

object[,] clonedArray = (object[,]) newArray.Clone();

簡單! 玩得開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM