반응형
오늘은 LINQ라는 정말 혁신적인 기능을 배워서!
그것을 복습할 겸 프로그램을 제작해봤습니다.
LINQ란 Language Integrated Qurey의 약자로,
SQL를 이용하여 데이터를 빠르고 편리하게 추출하는 방식입니다.
데이터베이스를 공부하신 분들이라면 익숙한 내용이겠네요!
코드설명
먼저 점수를 비교할 학생들을 생성합니다.
이 코드에서는 학생을 설정하면 자동으로 5개의 과목에 랜덤한 점수를 얻게 설계하였습니다.
그럼 그 점수의 총합과 평균을 구한 후,
학생들의 총합 점수를 비교하여 점수가 높은 순서대로 출력하는 코드입니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study
{
class Student
{
static Random exam = new Random();
public Dictionary<string, int> myScroes = new Dictionary<string, int>();
private List<string> subjects = new List<String>();
public int Sum { get; } // read only
public float Avg { get; } // read only
public string name;
public Student(string _name)
{
this.name = _name;
SettingSubject();
foreach(string subject in subjects) // 과목과 점수 설정하기
myScroes.Add(subject, exam.Next(50, 100)); // 점수는 50~100 사이 랜덤으로 설정
foreach(KeyValuePair<string, int> culSum in myScroes) // 합계 구하기
sum += culSum.Value;
avg = (float)sum / myScroes.Count; // 평균 구하기
}
private void SettingSubject() // 기본 과목 설정하는 함수
{
subjects.Add("kor");
subjects.Add("eng");
subjects.Add("math");
subjects.Add("science");
subjects.Add("social");
}
}
class Program
{
static void Main(string[] args)
{
List<Student> students = new List<Student>(); // 학생 리스트
students.Add(new Student("Eugene"));
students.Add(new Student("Moonsu"));
students.Add(new Student("Minji"));
students.Add(new Student("Yoona"));
students.Add(new Student("Junho"));
students.Add(new Student("Sanghyuk"));
students.Add(new Student("Minsu"));
var studentDBs = from studentDB in students // 학생중에서
orderby studentDB.Sum descending // 합계 내림차순으로 정렬
select studentDB;
foreach (var studentDB in studentDBs)
Console.WriteLine("이름: {0}\n" +
" - 국어: {1}, 영어: {2}, 수학: {3}, 과학: {4}, 사회: {5}\n" +
" - 합계: {6}, 평균: {7}\n",
studentDB.name,
studentDB.myScroes["kor"], studentDB.myScroes["eng"],
studentDB.myScroes["math"], studentDB.myScroes["science"],
studentDB.myScroes["social"],
studentDB.Sum, studentDB.Avg);
}
}
}
추가자료
LINQ를 모르시는 분들은 이 코드만 봐서 뭔지 이해가 안가실수도 있습니다.
저도 가끔 찾아볼 겸, LINQ에 대한 자료들을 공유하니, 한번 읽어보시길 바랍니다.
반응형
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 람다식 (0) | 2020.09.05 |
---|---|
[C#] 널 자료형과 연산자 ( Nullable, Elvis 등 ) (2) | 2020.09.05 |
[C#] Csharp 델리게이트와 이벤트 (0) | 2020.09.05 |
[C#] 배열 (이차원배열, 가변배열, 메서드) (0) | 2020.09.05 |
[C#] C샵 구조체 예제 (0) | 2020.09.05 |