2012-11-03 4 views
2

나는이 탐색 모음에 대한 링크의 일련의 출력 다음 코드를ASP MVC - foreach는 역

<% foreach (var item in (Dictionary<string, string>)ViewData["navItems"]) 
     { 
     Response.Write(Html.ActionLink(item.Key, item.Value)); 
     } 
    %> 

링크 목록이 역순으로 출력되도록이 코드를 변경하는 어쨌든 거기를 ? 당신이

답변

6

당신은 Enumerable.Reverse 방법 (문서 here)를 사용할 수 있습니다 사전의 항목 순서는 non-deterministic입니다. 지금 당장 특정 주문을 보았지만 Hashtables (사전은)가 보증되지 않습니다. 따라서 주문을 취소하는 방법을 사용하더라도 향후 주문이 보장되지는 않으며 솔루션에서 예기치 않은 결과가 발생할 수 있습니다. 열거 목적

은 사전에 각 항목 같은 값 및 해당 키를 나타내는 KeyValuePair 구조를 처리한다. 항목이 반환되는 순서는 정의되지 않습니다.

나의 추천은 직접 사전을 통해 열거하지만, 대신에, 당신이 그런 목록 <로, 순서를 보장 무언가의 형태로 원하는 값을 얻을> 그 시간에 그들을 정렬하지 않는 것입니다 응용 프로그램의 해당 목록을 열거하십시오.

5

뭔가 중요한 ..주기 인덱스를 감소시키는, 마지막 항목에서 시작에 foreach는주기를 변경합니다

var dic = (Dictionary<string, string>)ViewData["navItems"]; 

foreach (var item in dic.Reverse()) 
{ 
    Response.Write(Html.ActionLink(item.Key, item.Value)); 
} 

또는 구식 솔루션 :

2

내가 원하는지 확실하지 않습니다. 당신이한다면 당신은 다음을 사용할 수 있습니다. 만약 당신이 그것을 원한다면 Reverse()는 당신이 원하는 것입니다.

키의 역순으로 목록을 제공합니다. 값의 순서로 목록을 트래버스하려면 c.Key를 c.Value로 변경할 수 있습니다.

var dict = new Dictionary<string, string>() {{"a", "1"}, {"b", "2"}, {"c", "3"}}; 

foreach (var keyValuePair in dict.OrderByDescending(c => c.Key)) 
{ 
    Console.WriteLine(keyValuePair.Value); 
}