PDA

View Full Version : سوال: مشکل در تغییر سایز آرایه دو بعدی دینامیک(پویا)



ebrahimashori
یک شنبه 29 آبان 1390, 02:38 صبح
سلام
زمانی که می خواهم آرایه 2 بعدی دینامیک را با حفظ مقادیر قبلی تغییر سایز بدهم ، کامپایلر خطا می دهد. لطفا با یک مثال راهنمایی کنید.
البته من کد دقیق تغییر سایز آرایه با شرایط فوق را بلد نیستم و در هیچ کتابی پیدا نکردم و فقط می توانم آرایه 1 بعدی را تغییر سایز بدهم.
این کار امکان پذیر هست و اگر هست برای آرایه با بعد بیشتر از 2 هم در صورت امکان با مثال توضیح دهید.
ممنونم.
در زیر یک مثال برای تغییر آرایه 1 بعدی با حفظ مقادیر قبلی آورده ام.


byte[] test;
test = new byte[2];
test[0] = 5;
test[1] = 4;
Array.Resize(ref test, 6);
test[2] = 3;
test[3] = 2;
test[4] = 1;
test[5] = 0;
foreach (byte s in test)
{
ListBox1.Items.Add(s);
}

mmd2009
یک شنبه 29 آبان 1390, 10:39 صبح
با سلام

تا جایی که من میدونم ارایه 2 بُعدی یا بیشتر رو به صورت dynamic نمیتونید اندازشو تغییر بدید. یک راه ساده که میشه گفت اینه که ارایه رو در یک ارایه جدید Copy کنید

موفق باشید

ویرایش :

میتونی به این شکل Resize کنی ارایه رو :


private void button1_Click(object sender, EventArgs e)
{
var array2D = new int[2, 2];

array2D[0, 0] = 1;
array2D[0, 1] = 2;

array2D[1, 0] = 1;
array2D[1, 1] = 2;

listBox1.Items.Add("Old Array");

foreach (var i in array2D)
{
listBox1.Items.Add(i);
}

listBox1.Items.Add("New Array");

ResizeMultiDimensionalArray(ref array2D, 3, 2);

array2D[2, 0] = 1;
array2D[2, 1] = 2;

foreach (var i in array2D)
{
listBox1.Items.Add(i);
}
}

private void ResizeMultiDimensionalArray(ref int[,] myArray, int column, int row)
{
var newArray = new int[column, row];

Array.Copy(myArray, newArray, myArray.Length);

myArray = newArray;
}