dev/asp.net, c#

[c#] LINQ 컬렉션 표준 쿼리 메서드 3 - (수량자, 포함여부, 생성) Contains, All, Any, Empty, Repeat, Range

코딩for 2022. 11. 15. 11:01
반응형

 

수량자, 생성 관련한 컬렉션 메소드에 대해 알아봅니다.

메서드

메서드 이름 설명 C# 쿼리 식 구문
All 시퀀스의 모든 요소가 조건을 만족하는지를 확인  
Any 시퀀스의 임의의 요소가 조건을 만족하는지를 확인  
Contains 시퀀스에 지정된 요소가 들어 있는지를 확인  
DefaultIfEmpty 빈 컬렉션을 기본값을 갖는 singleton 컬렉션으로 변경  
Empty 비어 있는 컬렉션을 반환  
Range 일련의 숫자를 포함하는 컬렉션을 생성  
Repeat 반복되는 값이 하나 들어 있는 컬렉션을 생성  

 

수량자

시퀀스에서 조건을 충족하는 요소가 일부인지 전체인지를 나타내는 Boolean 값을 반환

All, Any, Contains
List<Student> students = new List<Student>
{
    new Student{grade = 3, name = "Tom",    scores = new int[] {60, 80} },
    new Student{grade = 3, name = "Brian" , scores = new int[] {50, 70} },
    new Student{grade = 4, name = "Chris" , scores = new int[] {80, 80}},
    new Student{grade = 5, name = "James" , scores = new int[] {100, 100} },
};

int[] scores = { 80, 60, 70, 40, 70, 100, 70 };

// All :  전체를 만족할때
bool isAll = students.All(item => item.grade > 3);
Console.WriteLine(isAll);
/*
False
*/

var all = from student in students
          // Student 의 score 가 모두 70 초과인 요소만
          where student.scores.All(item => item > 70)	
          select student;

foreach (var student in all)
{
    Console.WriteLine(student.grade + ", " + student.name);
}
/*
4, Chris
5, James
*/


// Any :  하나라도 만족할때
bool isAny = students.Any(item => item.grade > 3);
Console.WriteLine(isAny);
/*
True
*/

var any = from student in students
		  // Student 의 score 가 하나라도 80 이상인 요소
          where student.scores.Any(item => item >= 80)
          select student;

foreach (var student in any)
{
    Console.WriteLine(student.grade + ", " + student.name);
}
/*
3, Tom
4, Chris
5, James
*/

// Contains : 요소가 포함되었는지
bool isContains = scores.Contains(100);
Console.WriteLine(isContains);
/*
True
*/

var contains = from student in students
			// student name 이 B 가 포함된 요소
              where student.name.Contains('B')
              select student;

foreach (var student in contains)
{
    Console.WriteLine(student.grade + ", " + student.name);
}
/*
3, Brain
*/

 

 

생성

값의 새 시퀀스를 만드는 작업

 

DefaultIfEmpty, Empty, Range,Repeat
// default value
Student defaultStudent = new Student { grade = 0, name = "default", scores = new int[] { 0, 0 } };

List<Student> students = new List<Student>
{
    new Student{grade = 3, name = "Tom", scores = new int[] {60, 80} },
    new Student{grade = 3, name = "Brian" , scores = new int[] {50, 70} },
    new Student{grade = 4, name = "Chris" , scores = new int[] {80, 80}},
    new Student{grade = 5, name = "James" , scores = new int[] {100, 100} },
};

// empty List
List<Student> emptyStudents = new List<Student>();

foreach (var student in students.DefaultIfEmpty(defaultStudent))
{
    Console.WriteLine(student.grade + ", " + student.name);
}
/*
3, Tom
3, Brian
4, Chris
5, James
*/

//default
foreach (var student in emptyStudents.DefaultIfEmpty(defaultStudent))
{
    Console.WriteLine(student.grade + ", " + student.name);
}
/*
0, default
*/

var empty = Enumerable.Empty<Student>();
/*
*/

var range = Enumerable.Range(0, 5);
foreach (var item in range)
{
    Console.WriteLine(item);
}
/*
0
1
2
3
4
*/


var repeat = Enumerable.Repeat("Hello world!!", 5);
foreach (var item in repeat)
{
    Console.WriteLine(item);
}
/*
Hello world!!
Hello world!!
Hello world!!
Hello world!!
Hello world!!
*/

 

 

https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/linq/quantifier-operations

반응형