UnityEditor
UnityEditor 上でのみの配列操作なら ArrayUtility が利用できるのでこちらを利用します
UnityEditor.ArrayUtility - Unity スクリプトリファレンス
using UnityEditor; private void ArrayControl() { int[] _array = new int[0]; // 追加 ArrayUtility.Add(ref _array, 1); // 複数追加 ArrayUtility.AddRange(ref _array, new[]{1, 2}); // 指定の要素を削除 ArrayUtility.Remove(ref _array, 1); // 指定のインデックスを削除 ArrayUtility.RemoveAt(ref _array, 0); // Array を初期化 ArrayUtility.Clear(ref _array); // 含まれるか ArrayUtility.Contains(_array, 1); // 要素を検索 var index = ArrayUtility.FindIndex(_array, i => i == 9); // 指定した場所に追加 ArrayUtility.Insert(ref _array, 1, 1); // 対象のIndex ArrayUtility.IndexOf(_array, 1); // 対象の最後のIndex ArrayUtility.LastIndexOf(_array, 1); }
Runtime
ArrayUtility のをそのまま持ってくればいいけど、Runtimeでは利用できないので
一部機能のみ実装してみました
ArrayUtilityでは使っていたボクシングの処理周りは削除しました
public static class RuntimeArrayUtil { public static void Add<T>(ref T[] array, T item) { System.Array.Resize(ref array, array.Length + 1); array[array.Length - 1] = item; } public static void Insert<T>(ref T[] array, T item, int index) { System.Array.Resize(ref array, array.Length + 1); var length = array.Length; for (var i = index; i < length - 1; i++) { array[i + 1] = array[i]; } array[index] = item; } public static void Remove<T>(ref T[] array, T item) { var index = FindIndex(array, item); if (index < 0) return; var length = array.Length; for (var i = index; i < length - 1; i++) { array[i] = array[i + 1]; } System.Array.Resize(ref array, length - 1); } public static void RemoveAt<T>(ref T[] array, int index) { Remove(ref array, array[index]); } public static int FindIndex<T>(T[] array, T item) { var index = -1; for (int i = 0; i < array.Length; i++) { if (!array[i].Equals(item)) continue; return i; } return index; } public static void Clear<T>(ref T[] array) { System.Array.Clear(array, 0, array.Length); System.Array.Resize(ref array, 0); } public static bool Contains<T>(T[] array, T item) { return FindIndex(array, item) >= 0; } }
private void ArrayControl() { int[] _array = new int[]{1, 2, 3, 4, 5}; // 追加 RuntimeArrayUtil.Add(ref _array, 6); // 指定の要素を削除 RuntimeArrayUtil.Remove(ref _array, 1); // 指定のインデックスを削除 RuntimeArrayUtil.RemoveAt(ref _array, 0); // 含まれるか RuntimeArrayUtil.Contains(_array, 5); RuntimeArrayUtil.Contains(_array, 10); // 要素を検索 var index = RuntimeArrayUtil.FindIndex(_array, 5); // 指定した場所に追加 RuntimeArrayUtil.Insert(ref _array, 10, 1); // Array を初期化 RuntimeArrayUtil.Clear(ref _array); }