목요

  • 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

  • orderby는 결과를 정렬하는 연산자이다.

select

  • select는 데이터를 추출하는 역할을 한다.

aggregate

  • 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;
    }
}

+ Recent posts