게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발 4주차
1.간단한 셔플(랜덤) 배열 및 리스트를 만드는 방법
Using.UnityEngine.Linq

int[] arr = [0,1,2,3,4];

arr = arr.OrderBy(x => Random.Range(0f,4f)).Toarray();
해당 코드는 C#의 Linq 라이브러리의 OrderBy(오름차순 정렬할 매개변수) 메서드 이다.
OrderBy는 복합 정렬을 기반으로 만들어진 정렬 알고리즘이다.
arr.OrderBy(x => Random.Range(0f, 4f)) 메서드를 사용하면 각 요소에 대해 Random.Range(0f, 4f)가 호출되면서 그 결과값을 기준으로 정렬이 진행됩니다. 이때 Random.Range()가 각 요소마다 다른 값을 반환하여 랜덤으로 정렬 하게 됩니다.
정렬한 arr를 Toarray() 함수를 이용하여 배열로 만들고 초기화 합니다.

구체적으로 설명하자면:

OrderBy는 배열의 각 요소에 대해 람다 식 x => Random.Range(0f, 7f)를 실행하여 반환된 값을 기준으로 정렬합니다.
즉 ,  Random.Range(0f, 7f)는 호출될 때마다 0과 7 사이의 난수를 반환하므로, 배열의 각 요소에 대한 정렬 기준이 모두 다릅니다.
그러나 이 방법은 OrderBy가 Random.Range를 각 요소마다 몇 번 호출할지 제어할 수 없기 때문에,
성능이 중요한 경우 다른 방식의 섞기 알고리즘(Fisher-Yates shuffle)을 사용하는 것이 더 좋다.
나중에 Fisher-Yates shuffle를 공부를 해봐야겠다.
 

 

p.s 람다식이란 이름없는 함수로 간단하게 함수를 변수로 넣을때 사용된다.
하지만 이름이 없기에 재사용 할 수는 없으므로, 재사용 예정이면 따로 함수를 만들어 써야된다.

+ Recent posts