2016-07-22 1 views
0

다음과 같은 간단한 방법으로 작성할 수 있습니까? I.E., 람다없이. 이 가능해야 같은 stringIEquatable<string>을 구현하기간단한 IEnumerables에 대해 람다가없는 OrderBy

var strings = new[] { "Alabama", "Mississippi", "Louisiana" }; 
var ordered = strings.OrderBy(x => x); 

가 보인다.

+0

'list.Sort(); '어쩌면? –

+3

왜 그것을 제거하려고합니까 ?? 당신은 긍정적 인 사고 방식에 있어야합니다. 이'(x => x)'는 술에 취한 채 슬라이딩 글라스 문을 걸어 들어오고있는 이모 지입니다. – Will

+0

람다가없는 OrderBy는 주문이 아닙니다 ** By ** :] – Slai

답변

6

그것은 여기 이상의 IEquatable을 중요한 IComparable하지만이 가능하다 : strings 이미 배열이기 때문에

Array.Sort(strings); 

이 작동합니다. 당신이 어떤 IEnumerable을 요구하기 때문에 : Array.Sort() 결과를 반환하지 않고 전달되는 실제 객체를 정렬하고 호출하기 때문에 여분의 변수가이 두 번째 샘플에서 중요하다

var ary = strings.ToArray(); 
Array.Sort(ary); 

주, .ToArray()는 멀리 던져진 새로운 배열을 생성 . 여분의 변수가 없으면 작업을 잃게됩니다.

사용할 수있는 List<T> 개체에도 비슷한 정렬 방법이 있습니다.

public static class MyExtensions 
{ 
    public static IOrderedEnumerable<T> Sort(this IEnumerable<T> items) where T : IComparable 
    { 
     return items.OrderBy(i => i); 
    } 
} 

을 그리고 지금은 말할 단지 수 :

당신은이에 대한 자신의 확장 메서드를 만들 수 있습니다

var ordered = strings.Sort(); 
+2

'의 고유 한 값은'var ordered = new SortedSet (strings);'Array.Sort (strings.ToArray())'나에게는 어리석은 것처럼 보인다. 그것은 배열을 만들고, 그것을 제자리에 정렬 한 다음 결과를 버립니다. –

+0

이미 내 답변에 추가했습니다 :) –

+0

사실,하지만이 새로운 배열을 만듭니다. 정적 IEnumerable 주문 (this IEnumerable 열거 형)의 T : IComparable ; –