320x100
LINK(Language Integrated Query): 데이터 저장소 종류와 관계 없이 저장소에 일관성 있는 인터페이스로 질의
- 동일한 인터페이스 사용
- 다양하고 편리한 기능 (Max, Min, Average, OrderBy, First ...)
- 지연 실행 (성능 이점)
- 간결한 High Level 코드 품질
- 컴파일 타임 에러 체크
int[] numbers = { 5, 10, 8, 3, 6, 12 };
Query syntax
var result = from num in numbers
where num % 2 == 0
orderby num
select num * 2;
Method syntax
var result = numbers
.Where(num => num % 2 == 0)
.OrderBy(num => num)
.Select(num => num * 2);
사용 예시
1) 퀘스트들의 제목을 출력해주세요
2) 입장한 맵에 해당되는 퀘스트들만 보여줍니다
3) 현재 진행 중이어야 하고요
4) 진행 상태가 높은 퀘스트를 가장 먼저 출력합니다.
5) 진행 상태가 같은 경우 퀘스트 아이디가 낮은 순서로 출력합니다.
Non LINQ
List<Quest> result = new List<Quest>();
foreach (Quest quest in quests)
{
if (quest.isActive)
{
if (quest.MapIndex == currentMapIndex)
results.Add(quest);
}
}
results.Sort((x, y) =>
{
int compareValue = y.Progress.CompareTo(x.Progress);
if (compareValue == 0)
return x.ID.CompareTo(y.ID);
return compareValue;
});
LINQ
var result = quests
.Where(quest => quest.IsActive)
.Where(quest => quest.MapIndex == currentMapIndex)
.OrderByDescending(quest => quest.Progress)
.ThenBy(quest => quest.ID);
IOS 환경에서 LINQ를 사용할 수 없는 이유는 LINQ 자체의 결함이 아니라 mono AOT 컴파일러의 버그가 원인!
해결 방법
IL2CPP (IOS 64bit 지원을 위해서 반드시 사용)
UniLinq (https://github.com/RyotaMurohoshi/UniLinq): 낮은 버전의 Unity를 사용해야 한다면 Third party 사용
출처: http://ndcreplay.nexon.com/NDC2016/sessions/NDC2016_0047.html
320x100
'NDC > Dev' 카테고리의 다른 글
[NDC 2016] 구형맵에서는 어떻게 길을 찾아야 하나요? (0) | 2023.01.17 |
---|---|
[NDC 2014] 멀티쓰레드 프로그래밍이 왜이리 힘드나요? (0) | 2022.10.18 |
[NDC 2014] 파이썬과 친구들 (0) | 2021.12.06 |
[NDC2013] 테스트 꾸준히 잘하는 법 (0) | 2021.11.14 |
[NDC2013] 라이브 프로젝트에서 C++로 테스트 주도 개발하기 (0) | 2021.11.13 |