- 1. 概要
- 2. ところてん
1. 概要
「Array」は、参考サイトによれば。
配列を作成、操作、検索、並べ替えするためのメソッドを提供します。これにより、共通言語ランタイムのすべての配列の基底クラスとして機能します。
とのことです。
本ページは、下記のサイトを参考にさせていただきました。
「Array クラス (System)」
2. ところてん
やりたかったのは、処理用に使うバッファがあって、周期的に後からデータが入ってくるのですが。
後から、来たものを、バッファの最後にくっつけて、処理バッファの先頭のくっつけた分を削除する。
心太(ところてん)を押し出すように、処理用バッファを更新したかったのです。
「Array」の「Copy()」「Reverse()」「Resize()」というメソッドを使うことで、実現できました。
using System;
using System.Runtime;
public class Program
{
static public void Main ()
{
int[] data = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] plus = new int[]{ 11, 12, 13, 14, 15 };
int[] dst = new int[data.Length + plus.Length];
Console.WriteLine("処理前");
for (int i=0; i<data.Length; i++)
{
Console.WriteLine("data["+ i +"] = "+ data[i] +"");
}
Array.Copy(data, dst, data.Length);
Array.Copy(plus, 0, dst, data.Length, plus.Length);
Array.Reverse(dst);
Array.Resize(ref dst, data.Length);
Array.Reverse(dst);
Array.Copy(dst, data, data.Length);
Console.WriteLine("処理後");
for (int i=0; i<data.Length; i++)
{
Console.WriteLine("data["+ i +"] = "+ data[i] +"");
}
}
}
具体的なロジックは、19~24行になります。
「Buffer.BlockCopy()」の方が、コピーは速いらしいですが。
「Buffer」には、「Reverse()」「Resize()」がないようなので、「Array」で揃えました。
もう少し、スマートな書き方があるような気がしますが、まともに動作します。
上記を実行すると、下記の結果が得られます。
処理前
data[0] = 1
data[1] = 2
data[2] = 3
data[3] = 4
data[4] = 5
data[5] = 6
data[6] = 7
data[7] = 8
data[8] = 9
data[9] = 10
処理後
data[0] = 6
data[1] = 7
data[2] = 8
data[3] = 9
data[4] = 10
data[5] = 11
data[6] = 12
data[7] = 13
data[8] = 14
data[9] = 15
|