IT/C#

[C#] String 문자열끼리 비교하기. String 문자열 오름차순/내림차순 정렬. List<Struct> 구조체 리스트 오름차순/내림차순 정렬.

Ella.J 2024. 1. 26. 11:40
728x90
반응형

 

안녕하세요, Ella입니다😍

 

이번엔 string 문자열끼리 비교하는 법, 구조체 리스트 오름차순/내림차순 정렬하는 법에 대해 알아보겠습니다.

밑에 캡쳐본은 예시로 가져와봤는데, 이번에 '이재, 곧 죽습니다'를 너무 재밌게 봐서 배우들 이름을 넣었습니다. ㅋㅋㅋ

지훈오빠 요즘 너무 멋있어요...❤

근데, 이도현씨 저보다 오빠인 줄 알았는데,, 어리시네요,,, 하하

아무튼,,,,😂 각설하고 시작해 보겠습니다..^^

 

Sorting 하기 전.
Name 기준으로 Sorting 한 후.

 

 

그냥 단순한 List 문자열 리스트였다면, 위와 같이 간단하게 Sort 함수를 사용하여 정렬할 수 있습니다.

 

다만, List 구조체 리스트 같은 경우는 위와 같이 Sort 함수를 사용하는 경우 에러가 나기 때문에 사용할 수 없습니다. 구조체 안의 변수가 하나 이상이고 서로 비교할 수 없기 때문입니다.

 

따라서, 위와 같이 Sorting 알고리즘을 사용하여 정렬합니다.

두 개의 for문을 사용하여 0번째와 1번째부터 비교를 시작해서 List 개수만큼 비교합니다.

String.Compare(A, B) 함수를 이용하여 A와 B를 비교하는데,

이름을 기준으로 정렬하기 위해 위와 같이 students[i].Name과 students[j].Name 두 개의 문자열을 서로 비교합니다.

비교결과가 같으면 결과가 0이고, B>A인 경우는 0보다 큰 수, A<B인 경우는 0보다 작은 수가 나옵니다.

 

따라서 오름차순으로 정렬하기 위해서는 String.Compare(A, B) > 0 인 경우, B가 A 보다 커서 뒤에 와야 하는 문자열이기 때문에, A 구조체를 임시로 Temp 변수에 저장해 두고 B 구조체랑 순위를 변경해 줍니다.

 

 

[전체 소스코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public struct Student
{
    public string Name;
    public DateTime Birth;
    public string Phone;
}
public List<Student> students = new List<Student>();
 
private void btnStudentAdd_Click(object sender, EventArgs e)
{
    Student newStudent = new Student()
    {
        Name = txtName.Text,
        Birth = dtpBirth.Value,
        Phone = txtPhone.Text
    };
    students.Add(newStudent);
    InsertStudent();
}
 
public void InsertStudent()
{
    dgvStudents.Rows.Clear();
    for (int i = 0; i < students.Count; i++)
    {
        dgvStudents.Rows.Add(students[i].Name, 
            students[i].Birth.ToString("yyyy.MM.dd"), 
            students[i].Phone);
    }
}
 
public void StructListSorting()
{
    //이름 기준으로 오름차순 정렬
    for (int i = 0; i < students.Count - 1; i++)
    {
        for (int j = i + 1; j < students.Count; j++)
        {
            //String.Compare(A, B) 비교결과 같으면 =0, B가 A보다 뒤에 오면 >0, A가 B보다 뒤에 오면 <0
            if (String.Compare(students[i].Name, students[j].Name) > 0)
            {
                Student Temp = students[i];
                students[i] = students[j];
                students[j] = Temp;
            }
        }
    }
}
 
private void button2_Click(object sender, EventArgs e)
{
    StructListSorting();
    InsertStudent();
}
cs

 

728x90
반응형