본문 바로가기

프로그래밍/C#

[C#] LINQ를 이용한 점수순으로 정렬

반응형

오늘은 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에 대한 자료들을 공유하니, 한번 읽어보시길 바랍니다.

 

 

Language-Integrated Query (LINQ) (C#)

Learn about Language-Integrated Queries (LINQs) and review an example of the complete query operation.

docs.microsoft.com

 

C# LINQ 사용 방법 및 예제 from, select, where, order by

LINQ란 Language Integrated Query 라고해서 특정 데이터들에서 Query를 하여 데이터를 빠르고 편리하게 추출하는 방식이라 할 수 있다. 해당기능은 C# 3.0부터 추가가 되기 시작한 문법이다. 기본적으로 ��

hijuworld.tistory.com

 

반응형