【问题标题】:How to iterate backwards through an OrderDictionary如何通过 OrderDictionary 向后迭代
【发布时间】:2015-02-26 06:34:11
【问题描述】:

我有一个 OrderedDictionary,我正在像这样迭代它:

IDictionaryEnumerator myEnumerator = Model.RecentViews.GetEnumerator();

            while (myEnumerator.MoveNext())
            {
                <div>
                    <a href=@(myEnumerator.Key)>@myEnumerator.Value</a>
                </div>
            }

但是我实际上想以相反的方向迭代它。谁能告诉我怎么做?

基本上,我使用这个 OrderedDictionary 来显示网站上最后访问页面的链接列表。键是 url,值是链接的文本。我试图在顶部显示最新的,因此我想向后迭代。我使用 OrderedDictionary 的原因是必须保留链接的顺序。

也许我没有使用正确的集合,我不确定?

【问题讨论】:

  • 不能用Linq扩展方法Reverse??
  • 您是只使用这个Dictionary 进行迭代还是在应用程序的其他地方键入它?如果没有,也许您可​​以重新考虑使用LinkedList&lt;KeyValuePair&lt;string, string&gt;&gt;List&lt;KeyValuePair&lt;string, string&gt;&gt;

标签: c# collections


【解决方案1】:

这能解决问题吗?

    foreach(var key in Model.RecentViews.Keys.Cast<*TheTypeOfTheKey*>().Reverse())
    {
        <div>
            <a href=@(key)>@Model.RecentViews[key]</a>
        </div>
    }

编辑:

通用 SortedList 的使用演示(控制台应用程序);

class Program
{
    static void Main(string[] args)
    {
        SortedList<int, string> dict = new SortedList<int, string>();
        dict.Add(22, "Entry22");
        dict.Add(11, "Entry11");

        //forward
        Console.WriteLine("Forward:");
        foreach (var item in dict)
        {
            Console.WriteLine("{0} : {1}", item.Key, item.Value );
        }

        //backward
        Console.WriteLine("Backward:");
        foreach (var item in dict.Reverse())
        {
            Console.WriteLine("{0} : {1}", item.Key, item.Value );
        }
    }
}

输出:

Forward:
11 : Entry11
22 : Entry22
Backward:
22 : Entry22
11 : Entry11

【讨论】:

  • OrderedDictionary 不支持 Linq 的 Reverse() 扩展。
  • 所以它没有 IEnumerable? ...秒
  • 不,它的 DictionaryEntry。检查这个msdn.microsoft.com/en-us/library/…
  • 不知道这是否可行...从来没有使用过这个...我大部分时间都使用通用的 SortedList 可能是一样的?
  • @SelvaTS 用任何键替换 TheTypeOfTheKey ... string int 不管 ...
猜你喜欢
  • 2015-09-25
  • 2010-09-16
  • 1970-01-01
  • 2017-06-02
  • 2010-11-15
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 2023-01-31
相关资源
最近更新 更多