사전캠프/Unity

C# 기능 - Linq

서보훈 2024. 9. 3. 18:01

4주차 강의중, Linq의 OrderBy 를 사용하여 무작위로 카드를 배치하는것을 볼 수 있습니다.

C#에서 컬렉션 데이터를 가공할때 사용하는 Linq 문법을 정리하도록 하겠습니다.

 


Linq는 닷넷에서 지원하는 확장 메서드로, 사용하기위해 System.Linq 네임스페이스를 선언할 필요가 있습니다.

using System.Linq;

 

숫자로만 이루어진 배열이나 콜렉션의 경우, Linq를 사용하여 합, 갯수, 평균, 최댓값, 최소값을 구할 수 있습니다.

각각 Sum(), Count(), Average(), Max(), Min() 의 함수로 사용이 가능합니다.

using System.Linq;

{
    int[] ints = { 1, 2, 3, 4, 5, 6, 7, 8 };

    //합, 36 저장
    int sumInts = ints.Sum();
    //갯수, 8 저장
    int countInts = ints.Count();
    //평균, 4.5 저장
    float averageInts = (float)ints.Average();
    //최대값, 8 저장
    int maxInts = ints.Max();
    //최소값, 1 저장
    int minInts = ints.Min();
}

 

또한 조건식을 통하여 새로운 배열의 일부만을 가져오는 등의 활용도 가능합니다.

조건을 사용하는것은 Where() 함수를 사용하며, 매개변수로 조건식을 넣어줍니다.

using System.Linq;

{
    int[] ints = { 1, 2, 3, 4, 5, 6, 7, 8 };

    //newArr 이름으로 {4, 5, 6, 7, 8} 의 배열 생성   
    int[] newArr = ints.Where(number => number > 3).ToArray();
}

이때 조건식에는 람다식을 사용합니다.

화살표 함수라고도 하는 람다식은 => 으로 사용하며, Where 함수의 경우 왼쪽에 각 배열의 원소를 지정할 변수명을, 오른쪽에 조건식을 입력하게 됩니다.

이 경우 조건식이 true인 원소는 새로운 변수만 저장됩니다.

 

이때, 끝에 ToArray를 붙여서 배열형식으로 형변환을 해주는것을 볼 수 있는데, Linq를 사용할경우 기본적으로 IEnumerable<var> 의 형태인 콜렉션 형태로 저장되기때문에, Linq를 사용한 후 결과물을 배열로 저장하고 싶을경우 형변환을 해주어야 합니다.

 

또한 배열을 조건에 따라 정렬할 수 있는 OrderBy() 기능이 있습니다.

OrderBy() 또한 매개변수로 어떤 조건으로 정렬할것인지를 정할 수 있습니다.

using System.Linq;

{
    int[] ints = { 1, 5, 6, 2, 4, 8, 7, 3 };

    //newArr 이름으로 오름차순 정렬된 배열 생성
    int[] newArr = ints.OrderBy(x => x).ToArray();
}

 

 

숫자를 사용할 때 x => x 를 조건으로 사용할 경우, 자동으로 오름차순 정렬이 되며

문자열 배열을 사용할경우 x => x.Length 등을 사용하여 길이에 따라 정렬을 할 수 도 있습니다.

 

같은 방법으로 OrderByDescending 을 사용하면 내림차순 형태로 정렬이 됩니다.