💭
C#で2次元配列をランダムに並び替える(備忘録)
備忘録です
C#といっても、Unity環境で2次元配列を作ります。2次元配列をランダムに並び替えて、先頭から特定の数を取り出します。
これは力技です。繰り返し処理で強引に全要素を取り出して、並び替えています。Listを使ったり、ジャグ配列を利用することでより効率的にできると思います。また、多次元配列を利用しても、もっと効率世方法があると思います。が、とりあえず、こういう強引な方法でもできるということで。
C#の2次元配列をランダムに並び替え
- C#
- Unity
- 配列の並び替え
- 力技で並び替える
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeShuffleGenerator3 : MonoBehaviour
{
public GameObject prefab;
int[,] points =
{
{ 10, 10, 40 },
{ 20, 10, 30 },
{ 30, 10, 20 },
{ 40, 10, 10 },
};
// Start is called before the first frame update
void Start()
{
// 配列をシャッフルする
Shuffle(this.points);
// 4個の要素から先頭の2個のみを表示
for (int i = 0; i < 2; i++)
{
Vector3 vec3 = new Vector3(this.points[i,0], this.points[i,1], this.points[i,2]);
Instantiate(prefab, vec3, Quaternion.identity);
}
for(int i = 0; i < this.points.GetLength(0); i++)
{
Debug.Log(this.points[i,2]);
}
}
// Update is called once per frame
void Update()
{
}
public static void Shuffle(int[,] array)
{
for (int i = array.GetLength(0) - 1; i > 0; i--)
{
//[0]~[i]
int j = Random.Range(0, i + 1);
Swap(array, i, j);
}
}
//要素のスワップ
public static void Swap(int[,] array, int i, int j)
{
int[] tmp = new int[array.GetLength(1)];
for(int k = 0; k < array.GetLength(1); k++)
{
tmp[k] = array[i, k];
}
for(int l = 0; l < array.GetLength(1); l++ )
{
array[i, l] = array[j, l];
}
for(int m = 0; m < tmp.Length; m++)
{
array[j, m] = tmp[m];
}
}
}
Discussion