반응형
수량자, 생성 관련한 컬렉션 메소드에 대해 알아봅니다.
메서드
메서드 이름 | 설명 | 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!!
*/
반응형