我有下面的代碼輸出用於導航欄,一系列鏈接:ASP MVC - 逆向一個foreach
<% foreach (var item in (Dictionary<string, string>)ViewData["navItems"])
{
Response.Write(Html.ActionLink(item.Key, item.Value));
}
%>
反正是有改變這種代碼,以便鏈接列表是按相反的順序輸出?
我有下面的代碼輸出用於導航欄,一系列鏈接:ASP MVC - 逆向一個foreach
<% foreach (var item in (Dictionary<string, string>)ViewData["navItems"])
{
Response.Write(Html.ActionLink(item.Key, item.Value));
}
%>
反正是有改變這種代碼,以便鏈接列表是按相反的順序輸出?
您可以使用Enumerable.Reverse
方法(文檔here):
var dic = (Dictionary<string, string>)ViewData["navItems"];
foreach (var item in dic.Reverse())
{
Response.Write(Html.ActionLink(item.Key, item.Value));
}
或者老同學的解決方案:改變你的foreach循環的循環開始的最後一個項目,遞減指數..
東西重要的是你這裏應該注意的是,字典中的項目順序是non-deterministic。雖然您現在看到特定訂單,但無法保證散列表(其中包含字典)。因此,即使您使用某種方法來反轉訂單,您也無法保證未來訂單的順利發展,並且您可能會在解決方案中遇到意外的結果。
對於枚舉的目的,字典中的每個項被視爲 表示值和其 密鑰的KeyValuePair結構。項目返回的順序是未定義的。
我的建議是不要在字典枚舉直接,但是,相反,讓你在保證順序,如List <的東西形式所需的值>和他們當時進行排序,然後在應用程序中列舉該列表。
我不確定您是否想對它進行排序。如果你這樣做,你可以使用以下。如果你只是想它顛倒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);
}