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

Jon*_*ell 8 .net c# 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;
            }
        }
Run Code Online (Sandbox Code Playgroud)

das*_*ght 14

作为一般规则,您不希望"支付" *以获得您的程序不需要的可能性.例如,如果您的程序有兴趣检索和处理一对对(也称为"双成员元组"),但它不需要从元组的第一个成员到第二个成员执行查找,那么提供一个集合对更有效:

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

当然,如果该返回的数据结构用于查找,那么应该返回一个字典,或构建体上的客户端侧的一个从所述服务器传输的一些CPU负荷的给客户端.

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


Yuv*_*kov 9

A Tuple<T1, T2>代表一对值.那对并不一定意味着"这两个项目是相关的".当使用a时KeyValuePair<TKey, TValue>,你会期望给定一个键,你会得到一个值,两者之间会有某种联系.

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

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

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

  • 您现在可以使用命名元组。 (2认同)