2012-12-20 3 views
0

나는 다음 코드 예제가 있습니다일부 오해

List<int> list = new List<int>(); 

    list.Add(1); 
    list.Add(2); 
    list.Add(3); 
    list.Add(4); 
    list.Add(5); 
    list.Add(6); 
    list.Add(7); 

    list.OrderByDescending(n=>n).Reverse(); 

을하지만 사용할 때이 :

list.OrderByDescending(n=>n).Reverse(); 

내가 원하는 결과를 얻을 수 없습니다.

list.Reverse(); 

내가 원하는 결과를 얻을 :

는 경우 대신 위의 진술, 나는이 하나를 사용합니다.

첫 번째 문장을 사용하여 원하는 결과를 얻지 못하는 이유는 무엇입니까?

나는 확장 기능을 이해하는 데있어서 뭔가를 놓치고 있다고 생각합니다.

미리 감사드립니다.

+2

당신이 어떤 결과를 기대 :

편집
모두 정렬 순서에 대한 두 개의 목록을 얻으려면? '1..7'또는 '7..1'? 대답이 '7에서 1까지의 모든 숫자'이면 list.OrderByDescending (a => a)를 사용하십시오. –

+1

당신은 다음과 같이 써야합니다.) 기대하는 것. b.) 얻는 것. – looper

+0

원본 목록이 다음과 같이 보이는 경우 1 ... 7 결과가이 7과 같아야합니다.1 – Michael

답변

2

편집 : 따라서 Enumerable 확장이 원본 컬렉션을 변경한다고 생각하는 것 같습니다. 아니 그들은하지 않습니다.

IEnumerable<int> ordered = list.OrderByDescending(n => n); 
foreach(int i in ordered) 
    Console.WriteLine(i); 

OrderByDescending 주문 내림차순 (높은 순) 당신은 분명 원하는 것입니다 : 사실 그들은 당신이 변수에 asign 할 필요가 새로운 무언가를 돌려줍니다. 그래서 나는 왜 나중에 그것을 뒤집을 지 이해하지 못합니다. 그냥 당신이 int들 추가 한 순서를 반전하기 때문에

list.Reverse() 

:

var ordered = list.OrderByDescending(n=> n); 

이는 "임의의"순서를 반환

그래서 이것은 당신에게 예상 된 결과를 제공해야합니다. 주문한 방식으로 추가 한 경우 전혀 주문할 필요가 없습니다. 일반적으로

: 당신은 순서와 Reverse을 주문하려는 경우 반드시 주문하지 무엇인지 순서를 반전하려면 OrderBy 또는 OrderByDescending를 사용하는 (적어도 혼란).

6

list.Reverse() 메서드는 목록을 제자리에서 되돌려 원래의 list이 변경됩니다.

.OrderByDescending() 확장 방법은 새 목록 (또는 IEnumerable<T>)을 생성하고 원본은 list 그대로 유지합니다.

List<int> upList = list.OrderBy(n => n).ToList(); 
List<int> downList = list.OrderByDescending(n => n).ToList(); 
+0

+! - in-place/new list 부분을 놓쳤습니다! –

+0

목록으로 가야합니다. 첫 번째는 내림차순으로 정렬되고 두 번째는 OrderByIncreasing (동일한 값으로, 그 이유는 그 반대입니다) – Michael