HOWTO · Csharp

C#에서 필드별로 목록 정렬

이 기사에서는 C#에서 필드별로 목록을 정렬하는 방법을 설명합니다.

이 페이지의 내용

이 기사에서는 C# Sort() 함수와 LINQ의 OrderBy() 키워드를 사용하여 목록을 오름차순 및 내림차순으로 정렬하는 방법을 소개합니다.

먼저 이 예제에서 파생된 기능을 사용하기 위해 필요한 라이브러리를 가져와야 합니다.

using System;
using System.Linq;
using System.Collections.Generic;

PersonData라는 클래스를 만들고 그 안에 데이터 유형 문자열과 해당 생성자와 입력을 문자열 값으로 변환하고 반환하는 메서드를 사용하여 name이라는 변수를 정의합니다.

public class PersonData {
  public string name;

  public PersonData(string name) {
    this.name = name;
  }

  public override string ToString() {
    return name;
  }
}

그런 다음 PersonData 데이터 유형으로 5개의 변수를 선언하고 일부 문자열 값을 할당합니다.

PersonData tom = new PersonData("Tom");
PersonData roger = new PersonData("Roger");
PersonData fred = new PersonData("Fred");
PersonData jack = new PersonData("Jack");
PersonData anna = new PersonData("Anna");

이 필드에서 정렬을 구현하려면 목록을 만들고 이 데이터를 mergedList 목록에 삽입해야 합니다.

List<PersonData> mergedList = new List<PersonData>() { tom, roger, fred, jack, anna };

Sort() 메서드를 사용하여 C#의 Filed별로 목록 정렬

이것은 목록을 오름차순으로 정렬하는 첫 번째 방법입니다. 위 코드 블록에 Sort() 함수로 정의된 목록 이름을 간단히 호출하고 값을 비교하여 오름차순으로 정렬할 두 개의 인수를 전달합니다.

mergedList.Sort((x, y) => {
  int ret = String.Compare(x.name, y.name);
  return ret;
});

예시:

using System;
using System.Linq;
using System.Collections.Generic;

public class PersonData {
  public string name;

  public PersonData(string name) {
    this.name = name;
  }

  public override string ToString() {
    return name;
  }
}

public class SortList {
  public static void Main() {
    PersonData tom = new PersonData("Tom");
    PersonData roger = new PersonData("Roger");
    PersonData fred = new PersonData("Fred");
    PersonData jack = new PersonData("Jack");
    PersonData anna = new PersonData("Anna");

    List<PersonData> mergedList = new List<PersonData>() { tom, roger, fred, jack, anna };

    mergedList.Sort((x, y) => {
      int ret = String.Compare(x.name, y.name);
      return ret;
    });

    Console.WriteLine(String.Join(Environment.NewLine, mergedList));
  }
}

정렬 전 목록의 출력:

Tom
Roger
Fred
Jack
Anna

정렬 후 목록의 출력:

Anna
Fred
Jack
Roger
Tom

목록을 오름차순으로 정렬한 후에는 ‘Reverse()’ 메서드를 호출하여 내림차순으로 정렬할 수 있습니다.

mergedList.Reverse();

내림차순의 목록 출력은 다음과 같습니다.

Tom
Roger
Jack
Fred
Anna

OrderBy() 메서드를 사용하여 C#의 Filed별로 목록 정렬

이것은 목록을 오름차순으로 정렬하는 대체 방법입니다. OrderBy() 메서드를 사용하고 값을 검사하여 오름차순으로 정렬할 인수를 지정하여 이전 코드 블록에서 생성된 목록 이름을 호출합니다.

통사론:

List<PersonData> sortedList = mergedList.OrderBy(x => x.name).ToList();

예시:

using System;
using System.Linq;
using System.Collections.Generic;

public class PersonData {
  public string name;

  public PersonData(string name) {
    this.name = name;
  }

  public override string ToString() {
    return name;
  }
}
public class SortList {
  public static void Main() {
    PersonData tom = new PersonData("Tom");
    PersonData roger = new PersonData("Roger");
    PersonData fred = new PersonData("Fred");
    PersonData jack = new PersonData("Jack");
    PersonData anna = new PersonData("Anna");

    List<PersonData> mergedList = new List<PersonData>() { tom, roger, fred, jack, anna };

    List<PersonData> sortedList = mergedList.OrderBy(x => x.name).ToList();

    Console.WriteLine(String.Join(Environment.NewLine, sortedList));
  }
}

정렬 전 목록의 출력:

Tom
Roger
Fred
Jack
Anna

정렬 후 목록의 출력:

Anna
Fred
Jack
Roger
Tom

이 목록을 내림차순으로 정렬하려면 다음과 같이 목록을 오름차순으로 정렬한 후 Reverse() 함수를 호출하면 됩니다.

List<PersonData> sortedList = mergedList.OrderBy(x => x.name).ToList();

sortedList.Reverse();

내림차순의 목록 출력은 다음과 같습니다.

Tom
Roger
Jack
Fred
Anna