|
時間がたってしまいましたすいません。
配列→List intlist.Add((int[,])intarray.Clone()); List→配列 intarray = (int[,])intlist[intlist.Count - 1].Clone();
としてコピーすれば簡潔に一行でディープコピーすることができました。 ありがとうございます。
これに関して計測をしてみました。 以下のようなコードを書いて int[,] intarray = new int[4, 4]; List<int[,]> intlist = new List<int[,]>(); int kaisi; private void button2_Click(object sender, EventArgs e) { kaisi = Environment.TickCount; Thread th = new Thread(hoge); th.Start(); } private delegate void dlmain(); private void hoge() { for (int x = 0; x < 100000; x++) { intlist.Add(new int[4, 4] { { x + 1, x - 1, x + 1, x - 1} ,{ x + 2, x - 2, x + 2, x - 2} ,{ x + 3, x - 3 ,x + 3, x - 3} ,{ x + 4, x - 4 ,x + 4, x - 4}}); ////////////////////////////////////////////////////////////////////////// /*for (int j = 0; j < 4; j++) { for (int k = 0; k < 4; k++) { intarray[j, k] = intlist[intlist.Count - 1][j, k]; } }*/ intarray= (int[,])intlist[intlist.Count - 1].Clone(); ////////////////////////////////////////////////////////////////////////// string s = ""; for (int b = 0; b < 4; b++) { for (int c = 0; c < 4; c++) { s += intarray[b, c] + ","; } s += "\r\n"; } Invoke(new dlmain(delegate { textBox1.Text = s; label1.Text = TimeSpan.FromMilliseconds(Environment.TickCount - kaisi).ToString(); Refresh(); })); } }
1、地道に1個づつ代入する for (int j = 0; j < 4; j++) { for (int k = 0; k < 4; k++) { intarray[j, k] = intlist[intlist.Count - 1][j, k]; } } 2、簡潔に一行でディーコピー intarray = (int[,])intlist[intlist.Count - 1].Clone();
10万回ディープコピーをした計測結果です。 これをした所 1、2分25秒891 2、3分28秒844 何と一個づつループして代入する方が速かったのです。
どうも教えて頂いてありがとうございました。
|