2010-02-16 4 views
0

개체의 속성이 2 가지 인 개체 목록이 있습니다 : idname입니다. 개체의 이름으로 목록을 주문해야합니다.개체 목록을 주문하십시오

어떻게하면됩니까?

+2

좀 더 정보를 객체에 도움이 될 것입니다. –

답변

1

Linq는이를위한 내장 된 방법이있을 때 과도합니다. 당신이 배열을 의미하는 경우

, 단지 Array.Sort 사용 : 당신이 List<T>을 의미하는 경우

Array.Sort(items, (x, y) => x.Name.CompareTo(y.Name)); 

가, 거기 Sort 기능을 사용

items.Sort((x, y) => x.Name.CompareTo(y.Name)); 
+0

+1 Linq에 착수하기보다는 정렬을위한 네이티브 List 지원을 사용하기 위해 +1합니다 (Linq에 문제가있는 것은 아니지만,이 경우에는 잔인한 IMHO이며 더 큰 명확성을주지 못합니다) –

+1

지원에 내장 된 사용에 대해서는 사실이지만 누군가 다른 사람이 널 사례를 돌보지 않는다고 말한 것처럼 ... 이제는 위의 경우를 처리하도록 변경할 수 있지만 더 이상 코드는 더 이상 깨끗하지 않습니다. 그 다음에 간단한 orderby와 null checking 중 위의 선택 중 하나를 선택합니다 ... 나는 울타리에있어 어떤 경우에 더 좋습니까? – anthonyv

+0

@anthonyv - 모든 공정한 점. 그리고 네 - 일단 null 체크를 넣으면 간결함을 잃게됩니다. 여전히 사람들이 여러 가지 솔루션을 테이블에 놓는 것을 보는 것이 좋습니다. –

4

linq를 사용해 보셨나요?

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

namespace Demo 
{ 
    public class Test 
    { 
     public void SortTest() 
     { 
      var myList = new List<Item> { new Item { Name = "Test", Id = 1 }, new Item { Name = "Other", Id = 1 } }; 
      var result = myList.OrderBy(x => x.Name); 
     } 
    } 

    public class Item 
    { 
     public string Name { get; set; } 
     public int Id { get; set; } 
    } 
} 
1

을 이러한 개체의 목록을 처리하는 경우 가장 쉬운 방법은 Sort 메서드에 비교를 제공하는 것입니다.

var list = new List<MyObject>(); 
... 
list.Sort((item1, item2) => item1.Name.CompareTo(item2.Name)); 

(위의 샘플은 이름에서 null 검사를 수행하지 않습니다)

문자열 구현은 IComparable<string>이므로 좋고 간단합니다. 당신이 당신의 클래스에 IComparable<MyObject>을 구현하기위한 대안은 될 것이다, 그리고 당신은 단지 List<T> 클래스의 Sort 방법은 사용자 정의 비교 걸리는 과부하가 list.Sort()

0

호출 할 수

list.Sort((x,y) => x.Name.CompareTo(y.Name)); 
관련 문제