본문 바로가기
프로그래밍/Unity

c# 링크

by 뽀도 2017. 1. 6.

출처 : http://blog.eairship.kr/262 , 뇌를 자극하는 c# 



1. 링크 (LINQ) 


- LINQ는 Language - Intergrated Query의 약자 , 통합된 질의 언어를 말한다.

- LINQ를 통해 컬렉션 형태를 띄는 모든 데이터에 질의를 할 수 있다.

- LINQ를 이용하면 복잡한 구문을 좀 더 간단하게 필터링 하거나 정렬할 수 있다.


-----------------------------------------------------------------------------------------


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace study

{

    class Program

    {

        delegate void DoPrint();


        static void Main(string[] args)

        {

            List<int> intList = new List<int>();

            int[] numbers = { 1, 3, 4, 6, 5, 9, 8, 12, 15, 18, 17, 11, 22 };


            foreach (int num in numbers)

            {

                if (num % 2 == 0)

                    intList.Add(num);

            }

            intList.Sort();


            foreach (int num in intList)

                Console.Write("{0} ", num);

// LINQ를 사용하지 않은 방법


            int[] numbers2 = { 1, 3, 4, 6, 5, 9, 8, 12, 15, 18, 17, 11, 22 };

            var data = from num in numbers2

                       where num % 2 == 0

                       orderby num

                       select num;


            foreach (var i in data)

                Console.Write("{0} ", i);

//LINQ를 사용한 방법.


        }

    }

}

--------------------------------------------------------------------------------------

* from 
- LINQ 작성시 from절은 반드시 필요합니다. 

> from 범위 변수 in 데이터 원본

1
2
3
4
var data = from num in numbers
           where num % 2 == 0
           orderby num
           select num;

- 여기서 데이터 원본은 IEunerable or IEnumerable<T> 인터페이스를 상속하거나 IQueryable<T>와 같이 파생 인터페이스를 
지원하는 형식이어야 합니다.

- 위에서 사용한 numbers라는 정수형 배열의 요소가 순차적으로 num에 들어간다고 생각하면 쉽습니다. 하지만 실제로 들어가는 것은 아닙니다.

* where
- where절은 검색조건, 필터와 같은 역할을 합니다. 
- 데이터 원본으로 부터 순차적으로 요소를 가져오고 그 요소가 범위 변수에 들어가게 되면
이 범위 변수를 조건식을 통해 걸러내는 역할을 합니다.

만약 요소에 대해 조건식이 거짓이면 요소를 반환하지 않으며, 참이면 요소를 반환하게 됩니다.

>where 조건식 

int[] numbers = { 1, 3, 4, 6, 5, 9, 8, 12, 15, 18, 17, 11, 22 };
var data = from num in numbers
           where num < 10
           orderby num
           select num;


* orderby 
- 데이터의 정렬을 수행하며, 오름차순 혹은 내림차순으로 정렬된 결과를 보여줍니다.
- 기본적으로는 오름차순 순서를따릅니다.
- 오름차순인 경우 ascending, descending 키워드를 뒤에 붙입니다.
int[] numbers = { 1, 3, 4, 6, 5, 9, 8, 12, 15, 18, 17, 11, 22 };
var data = from num in numbers
           orderby num descending
           select num;
* select
- 최종적인 결과를 뽑아내는 역할을 합니다.
- LINQ 쿼리식은 from으로 시작했으면 select 또는 group 절로 끝나야 합니다.
int[] numbers = { 1, 3, 4, 6, 5, 9, 8, 12, 15, 18, 17, 11, 22 };
var data = from num in numbers
           where num < 10 && num % 2 == 0
           orderby num
           select num;


char[] chars = "str12i3!@$1ng".ToCharArray();
var data = from vchar in chars
           where vchar >= 97 && 122 >= vchar
           select vchar;
 
foreach(char i in data)
    Console.Write("{0}", i);

* group by
- 분류 기준에 따라 데이터를 분류하여 그룹화하여 그룹 개체를 반환합니다.
- LINQ 쿼리식에서도 group절을 이용하여 데이터를 분류할 수ㅜ 있습니다.

group A by B into C

A는 범위 변수, B는 분류 기준, C는 그룹 변수를 말합니다.

* join

- join 절은 직접 관계가 없는 두개의 데이터 원본을 연결시킬때 유용합니다.
- 각 원본의 요소가 서로 같은지 비교하여 일치한다면 데이터를 서로 연결시키고 일치하지 않는다면 연결을 시키지 않습니다.

from a in A
join b in B on a-field equals b-field

== 연산자 대신에 equals를 사용합니다.


* LINQ의 범위 변수와 foreach의 차이점
-> 링크 범위 변수는 실제로 데이터를 담지는 않습니다. 범위 변수는 오직 LINQ 질의 안에서만 통용됩니다.








반응형

'프로그래밍 > Unity' 카테고리의 다른 글

[unity] Awake(), Start(), Update() and FixedUpdate()  (0) 2018.06.07
c# yield  (0) 2017.06.12
var 암시적 형식  (0) 2017.01.05
델리게이트  (0) 2017.01.05
람다  (0) 2017.01.05

댓글