👌

C#で2次元Listのランダムな並び替え(備忘録)

2023/09/19に公開

備忘録です

C#といっても、Unity環境でList<List<int>>のリストを作ります。リストをランダムに並び替えて、先頭から特定の数を取り出します。

C#のListをランダムに並び替え

  • C#
  • Unity
  • Listの並び替え
public class ItemShuffleGenerator : MonoBehaviour
{
    public GameObject prefab;

    List<List<int>> points = new List<List<int>>(){
        new List<int>() { 10, 1, 40 },
        new List<int>() { 20, 1, 30 },
        new List<int>() { 30, 1, 20 },
        new List<int>() { 40, 1, 10 },
    };

    // Start is called before the first frame update
    void Start()
    {
        Shuffle(points);

        // 4個の要素から先頭の2個のみを表示
        for (int i = 0; i < 2; i++)
        {
            Vector3 vec3 = new Vector3(points[i][0], points[i][1], points[i][2]);
            Instantiate(prefab, vec3, Quaternion.identity);
        }
    }

    // Update is called once per frame
    void Update()
    {

    }

    public static void Shuffle(List<List<int>> list)
    {
        for (int i = list.Count - 1; i > 0; i--)
        {
            int j = Random.Range(0, i + 1);
            Swap(list, i, j);
        }
    }

    //要素のスワップ
    public static void Swap(List<List<int>> list, int i, int j)
    {
        List<int> tmp = list[i];
        list[i] = list[j];
        list[j] = tmp;
    }
}

Discussion