数组比词典更高效

Pos*_*Guy 0 c#

我的代码中有以下方法.我的老板问"你为什么要使用字典",你可以使用数组,效率更高:

    public static Dictionary<string, string> GetListOfMonths()
    {
        Dictionary<string, string> months = new Dictionary<string, string>();

        months.Add("1", "Jan");
        months.Add("2", "Feb");
        months.Add("3", "Mar");
        months.Add("4", "Apr");
        months.Add("5", "May");
        months.Add("6", "Jun");
        months.Add("7", "Jul");
        months.Add("8", "Aug");
        months.Add("9", "Sep");
        months.Add("10", "Oct");
        months.Add("11", "Nov");
        months.Add("12", "Dec");

        return months;
    }
Run Code Online (Sandbox Code Playgroud)

我使用它来代码重用.所以我可以绑定到应用程序各个部分的一些月下拉菜单.

Jon*_*eet 19

对于基于整数索引的合理密集集合,数组肯定更有效.

另一方面,数组不会让你使用string密钥,就像你的字典一样.

回到第一手,为什么你想要字典的字符串键?

我不会在性能方面过于沉溺 - 编写最易读的代码.如果你确定在这里使用字符串键更合适,那么继续使用字典.替代方法(如果您已经提供了一个字符串)是将整数和索引解析为数组.

我们说这将是最好的解决方案并不是真的可行.

  • @coffeeaddict - 每次调用此方法而不是使用单个静态实例时创建新字典的事实可能会比在数组和字典之间选择更多地损害您的性能.你在这里看一堆分配和12个方法调用.在任何情况下(a)每月一百万次点击并不是真的,(b)如果你还没有对应用程序进行分析,那么无论如何你无疑会优化错误的地方. (12认同)
  • @coffeeaddict:每月百万次点击实际上非常小.这不到每秒一次命中.如果这会导致性能问题,那么除了字典查找和数组查找之外,你还有更大的问题.值得一提的是,我所服务的服务器获得了比这更多的点击率,但是如果没有简单的分析证据,我仍然不会以可读性为代价进行微优化. (9认同)
  • 如果您将其绑定到下拉列表,则表明您依赖于排序.但是,字典在枚举时不保证任何排序.它现在可能有用,但不能保证它将来会有用.仅这一点可能是转换的一个很好的理由. (3认同)

Kon*_*man 7

您应该对您的老板说:"我使用字典是因为它会导致更易读和可维护的代码.如果在测试期间我们检测到应用程序中的性能问题,并且分析表明它是字典的错误,那么我将尝试使用数组."

  • 哈哈.尼斯.然而,在这种情况下,数组就像可读的IMO一样. (6认同)