ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1112)
    • 개인 프로젝트 (1)
      • Unity (1)
      • Unreal (0)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (190)
      • Unreal (69)
      • Unity (110)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (242)
      • 공통 (21)
      • 네트워크 (45)
      • OS & 하드웨어 (60)
      • 자료구조 & 알고리즘 (99)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (377)
      • C++ (168)
      • C# (97)
      • Java (11)
      • Python (36)
      • SQL (44)
      • JavaScript (9)
      • React (7)
    • 그 외 (15)
      • Math (7)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • SQL
  • 유니티
  • Unity
  • C
  • 문자열
  • 배열
  • python
  • C++
  • string
  • 파이썬
  • c#
  • 티스토리챌린지
  • 백준
  • 오블완
  • 그래픽스
  • 클래스
  • 포인터
  • 함수
  • 알고리즘
  • 언리얼

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

프로그래밍 언어/C#

[C#] LINQ (링크) 메소드

2025. 7. 28. 12:42

where

배열 또는 컬렉션에서 조건에 맞는 데이터를 반환

List<int> numbers = new List<int>() { 1, 2, 3, 4, 5 };

IEnumerable<int> numbers1 = numbers.Where(n => n > 3);
foreach(int number in numbers1)
{
    Console.WriteLine($"{number}");
}
Console.WriteLine();

List<int> numbers2 = numbers.Where(n => n > 3).ToList();
foreach (int number in numbers2)
{
    Console.WriteLine($"{number}");
}

All

배열 또는 컬렉션에서 조건이 모두 같은 값이 있을 때 true, 다른 값이 하나라도 있으면 false

List<int> numbers1 = new List<int> { 2, 2, 2 };
Console.WriteLine($"{numbers1.All(n => n == 2)}");
Console.WriteLine($"{numbers1.All(n => n == 3)}");

List<int> numbers2 = new List<int> { 2, 2, 3 };
Console.WriteLine($"{numbers2.All(n => n == 2)}");

Any

배열 또는 컬렉션에서 조건이 하나라도 같으면 true, 없으면 false

List<int> numbers1 = new List<int> { 2, 2, 2 };
Console.WriteLine($"{numbers1.Any(n => n == 2)}");
Console.WriteLine($"{numbers1.Any(n => n == 3)}");

List<int> numbers2 = new List<int> { 2, 2, 3 };
Console.WriteLine($"{numbers2.Any(n => n == 2)}");

Take

배열 또는 컬렉션에서 n개의 데이터 가져오기

var numbers = Enumerable.Range(1, 10); // 1~10
var takeNumbers1 = numbers.Take(3); // 앞에서 3개 가져옴
foreach (var number in takeNumbers1)
{
    Console.WriteLine($"{number}");
}
Console.WriteLine();

// 짝수 3개 가져옴
var takeNumbers2 = numbers.Where(n => n % 2 == 0).Take(3);
foreach (var number in takeNumbers2)
{
    Console.WriteLine($"{number}");
}

Skip

배열 또는 컬렉션에서 n개의 데이터를 제외함

var numbers = Enumerable.Range(1, 10).ToList(); // 1~10
var skipNumbers1 = numbers.Skip(8); // 8개 스킵
foreach (var number in skipNumbers1)
{
    Console.WriteLine($"{number}");
}
Console.WriteLine();

// 3개 스킵 후 2개 가져옴
var skipNumbers2 = numbers.Skip(3).Take(2);
foreach (var number in skipNumbers2)
{
    Console.WriteLine($"{number}");
}
Console.WriteLine();

Distinct

배열 또는 컬렉션에서 중복 데이터를 제거함

var numbers = new List<int>() { 2, 3, 2, 3, 1, 2 };
var distinctNumbers = numbers.Distinct();
foreach (var number in distinctNumbers)
{
    Console.WriteLine($"{number}");
}

OrderBy / OrderByDescending

  • OrderBy 오름차순 정렬
  • OrderByDescending 내림차순 정렬
var numbers = new List<int>() { 2, 3, 1 };
var sortAsc = numbers.OrderBy(n => n);
foreach (var number in sortAsc)
{
    Console.WriteLine($"{number}");
}
Console.WriteLine();

var sortDesc = numbers.OrderByDescending(n => n);
foreach (var number in sortDesc)
{
    Console.WriteLine($"{number}");
}

Single / SingleOrDefault

  • Single과 SingleOrDefault 메서드는 조건에 맞는 값이 있으면 단 하나의 값만 가져옴
  • Single 조건에 맞는 값이 없으면 예외 발생
  • SingleOrDefault 조건에 맞는 값이 없으면 데이터 형식의 기본값 또는 null 값을 반환
  • List<int>의 데이터들에서 중복되는 데이터가 있으면 예외 발생 ({2, 2, 3}) 2가 중복 예외 발생
var numbers = new List<int>() { 1, 2, 3 };
int number1 = numbers.Single(n => n == 2);
Console.WriteLine($"있음 {number1}");

int? number2 = numbers.SingleOrDefault(n => n == 2);
Console.WriteLine($"있음 {number2}");

int? number3 = numbers.SingleOrDefault(n => n == 15);
Console.WriteLine($"없음 {number3}");
Console.WriteLine();

List<TestData> datas = new List<TestData>()
{
    new TestData() { i = 1, j = 11 },
    new TestData() { i = 2, j = 22 },
    new TestData() { i = 3, j = 33 },
};
var data1 = datas.SingleOrDefault(n => n.i == 1 && n.j == 11);
Console.WriteLine($"있음 i: {data1.i}, j: {data1.j}");

var data2 = datas.SingleOrDefault(n => n.i == 1 && n.j == 12);
if (data2 == null)
{
    Console.WriteLine("없음 data is null");
}
else
{
    Console.WriteLine($"있음 i: {data1.i}, j: {data1.j}");
}

//
public class TestData
{
    public int i;
    public int j;
}

First / FirstOrDefault

  • 조건에 맞는 값이 있으면 하나 이상의 데이터 중 첫 번째 값을 가져옴
  • First 조건에 맞는 값이 없으면 예외 발생
  • FirstOrDefault 조건에 맞는 값이 없으면 데이터 형식의 기본값 또는 null 값을 반환
  • List의 데이터들에서 중복되는 데이터 있어도 됨 (Single 또는 SingleOrDefault 보다는 안전해 보임)
var numbers = new List<int>() { 2, 2, 3 };
int number1 = numbers.First(n => n == 2);
Console.WriteLine($"있음 {number1}");

int? number2 = numbers.FirstOrDefault(n => n == 2);
Console.WriteLine($"있음 {number2}");

int? number3 = numbers.FirstOrDefault(n => n == 15);
Console.WriteLine($"없음 {number3}");
Console.WriteLine();

List<TestData> datas = new List<TestData>()
{
    new TestData() { i = 1, j = 11 },
    new TestData() { i = 2, j = 22 },
    new TestData() { i = 3, j = 33 },
};
var data1 = datas.FirstOrDefault(n => n.i == 1 && n.j == 11);
Console.WriteLine($"있음 i: {data1.i}, j: {data1.j}");

var data2 = datas.FirstOrDefault(n => n.i == 1 && n.j == 12);
if (data2 == null)
{
    Console.WriteLine("없음 data is null");
}
else
{
    Console.WriteLine($"있음 i: {data1.i}, j: {data1.j}");
}

Select

새로운 형태의 데이터로 반환가능

var numbers = Enumerable.Range(1, 3).ToList(); // 1~3
var selectNumbers = numbers.Select(n => n * n);
foreach (var number in selectNumbers)
{
    Console.WriteLine($"{number}");
}
Console.WriteLine();

// 익명 형식(new { ... })을 사용하므로 무조건 var로 받아야 함
var newDatas = numbers.Select(n => new { Id = n, Name = $"{n.ToString()}번 이름" });
foreach (var data in newDatas)
{
    Console.WriteLine($"{data.Id}, {data.Name}");
}

ForEach

List<T> 리스트의 크기 만큼 반복

Enumerable.Range(1, 3).ToList().ForEach(n => Console.Writeline(n));

문법

from, where, select 같은 키워드를 사용

var numbers = Enumerable.Range(1, 10).ToList(); // 1~10
// 짝수
var queryNumbers = 
    from n in numbers 
    where n % 2 == 0 
    orderby n descending
    select n;

foreach (var number in queryNumbers)
{
    Console.WriteLine($"{number}");
}

Count / Sum / Average

private void LINQCount()
{
    var bunch = new List<int> { 1, 2, 3, 4, 5 };
    var count = bunch.Count(); //Collection 내부 요소의 개수 반환
}
private void LINQSum()
{
    var bunch = new List<int> { 1, 2, 3, 4, 5 };
    var sum = bunch.Sum(); //Collection 내부 요소의 총합 반환
}
private void LINQAverage()
{
    var bunch = new List<int> { 1, 2, 3, 4, 5 };
    var average = bunch.Average(); //Collection 내부 요소의 평균 반환
}

GroupBy

// 지정된 키에 따라 데이터를 그룹화한다
void LINQGroup()
{
	var bunch = new List<string> { "lamborghini", "ferrari", "mclaren", "aston martin", "bentley" };
    var groups = bunch.GroupBy(x => x[0]); //Collection 내부의 각 요소들의 첫 글자를 기준으로 그룹화
}

Distinct

void LINQDistinct()
{
	var bunch = new List<int> { 1, 1, 2, 2, 2, 2, 3, 4, 5, 5, 5};
    var distinct = bunch.Distinct().ToList(); //중복된 값을 제거하고 반환 
}

 

https://lightgg.tistory.com/33

https://harzardous.tistory.com/2

저작자표시 (새창열림)

'프로그래밍 언어 > C#' 카테고리의 다른 글

[C#] nameof 연산자  (0) 2025.08.09
[C#] Dictionary형에 LINQ 사용  (0) 2025.07.29
[C#] 6.0 using static  (0) 2025.07.28
[C#] CS0273 에러 accessor must be more restrictive than the property or indexer  (0) 2025.07.24
[C#] unsafe 키워드 소스코드  (0) 2025.06.17
    '프로그래밍 언어/C#' 카테고리의 다른 글
    • [C#] nameof 연산자
    • [C#] Dictionary형에 LINQ 사용
    • [C#] 6.0 using static
    • [C#] CS0273 에러 accessor must be more restrictive than the property or indexer
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바