프로그램/유니티 스크립트 소스

[유니티 스크립트 소스] 배열, 리스트 섞기(Shuffle)

코더 제로 2021. 2. 9. 00:51
728x90
반응형

1. 리스트 섞기

private List<T> ShuffleList<T>(List<T> list)
{
    int random1,  random2;
    T temp;

    for (int i = 0; i < list.Count; ++i)
    {
        random1 = Random.Range(0, list.Count);
        random2 = Random.Range(0, list.Count);

        temp = list[random1];
        list[random1] = list[random2];
        list[random2] = temp;
    }

    return list;
}

 

2. 배열 섞기

private T[] ShuffleArray<T>(T[] array)
{
    int random1, random2;
    T temp;

    for (int i = 0; i < array.Length; ++i)
    {
        random1 = Random.Range(0, array.Length);
        random2 = Random.Range(0, array.Length);

        temp = array[random1];
        array[random1] = array[random2];
        array[random2] = temp;
    }

    return array;
}

 

3. 예제

using System.Collections.Generic;
using UnityEngine;

public class Shuffle : MonoBehaviour
{
    void Start()
    {
        List<int> lists = new List<int>();
        lists.Add(0);
        lists.Add(1);
        lists.Add(2);
        lists.Add(3);
        lists.Add(4);
        lists = ShuffleList(lists);

        for (int i = 0; i < lists.Count; i++)
        {
            Debug.Log(lists[i]);
        }

        int[] arrays = new int[5];
        arrays[0] = 0;
        arrays[1] = 1;
        arrays[2] = 2;
        arrays[3] = 3;
        arrays[4] = 4;
        arrays = ShuffleArray(arrays);

        for (int i = 0; i < arrays.Length; i++)
        {
            Debug.Log(arrays[i]);
        }
    }

    private List<T> ShuffleList<T>(List<T> list)
    {
        int random1,  random2;
        T temp;

        for (int i = 0; i < list.Count; ++i)
        {
            random1 = Random.Range(0, list.Count);
            random2 = Random.Range(0, list.Count);

            temp = list[random1];
            list[random1] = list[random2];
            list[random2] = temp;
        }

        return list;
    }

    private T[] ShuffleArray<T>(T[] array)
    {
        int random1, random2;
        T temp;

        for (int i = 0; i < array.Length; ++i)
        {
            random1 = Random.Range(0, array.Length);
            random2 = Random.Range(0, array.Length);

            temp = array[random1];
            array[random1] = array[random2];
            array[random2] = temp;
        }

        return array;
    }
}

 

728x90
반응형