람다식이란?
-익명 함수를 통해 간단하게 함수를 표현하는 방식
-기본 문법 : x => x * x (매개변수) => (식)
예시
List list;
list.OrderBy(x => Random.Range(0,10));
위 내용은 list의 내부 요소들을 랜덤하게 정렬하는 방식이다.
먼저 람다식을 통해 익명함수(x) 를 식(Random.Range(0,10)) 으로 정리했다.
OrderBy 함수를 통해 list 내부의 각 요소(x)를 받아 Random.Range(0, 10)을 통해 각 요소에 랜덤한 숫자를 부여하여 그 숫자를 기준으로 정렬한다.
1차 람다식은 처음 함수를 기준으로 반복문처럼 끝까지 돌기 때문에 list의 모든 요소를 돌며 순서를 변경해준다.
여기서 익명 함수는 사용자가 커스텀 가능함으로 list.OrderBy(sort => Random.Range(0,10); 라고 변경할 수 있다.
그럼 우린 한가지 궁금증이 생긴다. 람다식이 처음부터 끝까지 돌면서 list 요소들의 순서를 변경하면 변경된 요소가 한번더 람다식을 거칠 수 있는것이 아닌가?
결론부터 말하자면 아니오 이다.
list 의 내부 요소들이 [0,0,1,1,2,2] 라고 가정하자.
- 0 → Random.Range(...) → 5
- 0 → 1
- 1 → 6
- 1 → 0
- 2 → 3
- 2 → 2
로 각 내부 요소들은 Random.Range를 통해 번호를 부여 받고 부여 받은 번호를 토대로 마지막에 정렬이 된다.
그럼 한가지 더 의문점이 생긴다. Random.Range를 통해 받은 값이 같은 값이라면 어떻게 될까?
만약 Random.Range로 생성된 정렬 기준값이 서로 같은 경우,
OrderBy는 내부적으로 안정 정렬(Stable Sort)을 사용하기 때문에,
같은 값을 가진 요소는 원래 배열에서 앞에 있던 요소가 우선순위를 가지게 된다.
'Unity > 문법' 카테고리의 다른 글
| [Unity] 상속 금지 클래스 (sealed) (0) | 2025.09.22 |
|---|---|
| [Unity]LinQ - FirstOrDefault, Where, Select 차이 (0) | 2025.04.28 |
| [Unity]Random.Range와 Random().Next 차이점 (0) | 2025.04.15 |
| [Unity] if문과 switch case 문 (0) | 2025.04.14 |