使用Two Item Tuple与Dictionary相比有什么好处?

时间:2014-04-28 17:22:31

标签: c# .net dictionary tuples

我有代码,我返回一个IWebElements列表及其相应的名称?我的理解是,具有两个项目的元组基本上是相同的,但是Dictionary使用哈希映射来关联这两个值。在字典上使用Two Item Tuple有什么好处,反之亦然?

public Dictionary<IWebElement, string> SelectAllOptions(IWebDriver driver, ref DataObject masterData)
    {
        //Get the ID of the dropdown menu
        DatabaseRetrieval.GetObjectRepository(ref masterData);
        var strDropMenuId = masterData.DictObjectRepository["ID"];
        //Find the dropdown menu and pull all options into a list
        try
        {
            var dropMenu = new SelectElement(driver.FindElement(By.Id(strDropMenuId)));
            // TODO want to know how we want this list to return. 
            var options = dropMenu.Options as List<IWebElement>;
            if (options != null)
            {
                var values = options.ToDictionary(option => option, option => option.Text);
                return values;
            }
        }

4 个答案:

答案 0 :(得分:11)

作为一般规则,您不希望为您的程序不需要支付&#34; * 。例如,如果您的程序有兴趣检索和处理一对对(也称为&#34;两个成员的元组&#34;),但它不需要从元组的第一个成员执行查找到第二个,然后提供一组对更有效:

IEnumerable<Tuple<IWebElement, string>> SelectAllOptions(...)
  • 此方法占用的内存较少,因为您没有为散列桶分配空间
  • 这种方法占用的CPU较少,因为没有散列密钥计算或冲突解决成本
  • 此方法不建议读者将数据用于查找。

当然,如果您返回的的数据结构用于查找,那么您应该返回一个字典,或者在客户端构造一个字典,以便将一些CPU负载从服务器传输到客户。

* 内存,CPU周期,可读性降低等

答案 1 :(得分:9)

Tuple<T1, T2>表示一对值。那对不一定必须意味着&#34;这两个项目是相关的&#34;。当使用KeyValuePair<TKey, TValue>时,你会期望给定一个键,你会得到一个值,两者之间会有某种联系。

元组实现IComparableIStructuralEquatable,这样可以更轻松地比较元组。 除此之外,我会从逻辑角度来看待它,我是否需要将给定的键与值匹配?或者我只需要将两个值耦合在一起,而类可能会有一些开销。

我看到Tuples的一个缺点是,你必须处理标记为Item1和Item2的属性,这可能会使它的可读性降低。

另外,请记住,元组是class(不可变的),KeyValuePair是结构,所以当你将它们作为参数传递时,你会通过引用传递元组,而按值传递KeyValuePair(除了明确声明refout

答案 2 :(得分:2)

元组相对于词典的一个优点是可以命名元组。 使用List<(string text, string url)> linksDictionary<string, string> links更有意义。

答案 3 :(得分:1)

要添加其他答案,将键值数据存储为元组列表而不是字典中有时会有优势。

根据您的需要,查找速度可能并不重要,但插入列表的顺序可能仍然很重要。您可以遍历字典中的键和值,但未定义顺序。

另一个优点是,您可以根据需要将具有相同第一个元素的多个对放入列表中,其中对于字典,每个唯一键只能有一个值。