목요
- LINQ(Language Integrated Query) 사용법을 알아보자.
LINQ
- 본문은 2019.x를 시준으로 테스트 되었으며, 5.2.1f 이상 환경에서는 안정적으로 LINQ 지원이 되는 것 같다.
- LINQ는 코드를 좀더 간결하게 사용하기 위해 사용되는 쿼리문이다.
- 보통 개발에 많은 부분들이 Collection으로 사용될 것이다.
- LINQ를 사용할 수 없는 환경에서는 Collection에서 특정 데이터를 찾는데 추가 코드들이 삽입되어야 했었다.
- 하지만 아래 4가지 문법만 알아도 Collection에서 데이터를 찾는데 많은 수고를 절약할 수 있다.
LINQ 사용
- Linq를 사용하기 위해서는 네임스페이스에 using System.Linq를 추가해야 한다.
from
- from은 범위를 지정하여 데이터를 검색하는 문이다.
- Unity Linq에서는 지원하지 않는 것으로 보인다.
- foreach로 필요한 List를 재정의 해야하는 것 같다.
where
- where는 조건을 지정하여 데이터를 검색하는 문이다.
orderby
select
- select는 데이터를 추출하는 역할을 한다.
aggregate
예시
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public class LinqFilter : MonoBehaviour
{
List<string> mData = new List<string>();
// Start is called before the first frame update
void Start()
{
mData.Add("A");
mData.Add("AA");
mData.Add("BCDS");
mData.Add("ADG");
var orderByList = mData.OrderBy(t => t.Length).ToList<string>();
IEnumerator e = orderByList.GetEnumerator();
Debug.Log("---- orderBy ----");
while(e.MoveNext() && e.Current != null)
{
Debug.Log(e.Current);
}
var whereList = mData.Where(t => t.Length > 2).ToList<string>();
e = whereList.GetEnumerator();
Debug.Log("---- where ----");
while (e.MoveNext() && e.Current != null)
{
Debug.Log(e.Current);
}
var selectList = mData
.Select(t => From(t))
.ToList<string>();
e = selectList.GetEnumerator();
Debug.Log("---- select ----");
while (e.MoveNext() && e.Current != null)
{
Debug.Log(e.Current);
}
Debug.Log("---- revmoe ----");
// 조건을 설정하여 제거
mData.RemoveAll(data => "AA".Equals(data));
Debug.Log("---- aggregate ----");
var result = mData.Aggregate("", (t,v) => t+v).ToString();
Debug.Log(result);
}
public string From(string str)
{
if(str.StartsWith("A", System.StringComparison.Ordinal))
{
return str;
}
return null;
}
}