【问题标题】:find and delete tuple from list of tuples in C# 4.0从 C# 4.0 中的元组列表中查找和删除元组
【发布时间】:2013-06-16 07:34:02
【问题描述】:

我创建了一个元组列表:

static List<Tuple<string, string>> Alt;

用户添加到此列表中:

Alt.Add(new Tuple<string, string>(tbAlt.Text, ""));

根据第一个字符串(即 tbAlt.Text )查找元组并删除它或修改第二个字符串的最佳方法是什么?

我是使用元组和列表的新手 :)

非常感谢您的帮助!

【问题讨论】:

    标签: c# .net list find tuples


    【解决方案1】:

    您可以使用List&lt;T&gt;.FindIndex 查找匹配的索引,然后根据需要进行替换。

    int index = Alt.FindIndex(t => t.Item1 == tbAlt.Text);
    
    if (index != -1)
    {
       // Modify
       Alt[index] = Tuple.Create(tbAlt.Text, "NewText");
    
       // Remove:
       Alt.RemoveAt(index);
    }
    

    【讨论】:

      【解决方案2】:

      根据第一个字符串 (Item1) 的值查找元组:

      var t = Alt.FirstOrDefault(i => i.Item1 == "SomeString");
      if(t != null)
      {
          // delete
          Alt.Remove(t);
      }
      

      来自 cmets:

      您不能修改第二项 (Item2) 的值,因为元组是不可变的,因此您必须将其删除并重新添加。

      【讨论】:

      • 元组是不可变的 - 你不能设置 Item2: msdn.microsoft.com/en-us/library/dd386892.aspx 这就是我使用 FindIndex 而不是 LINQ 的原因(所以你可以替换列表中的整个元组)
      • Ops,谢谢@ReedCopsey,如果您需要维护元组的顺序是合理的,否则删除旧的和添加新的元组也应该可以解决问题。
      【解决方案3】:

      如果您确定列表中包含您的项目:

      Alt.Remove(Alt.First(i => i.Item1 == tbAlt.Text));
      

      但是,要修改元组,您必须创建一个新元组。

      if (Alt.Any(i => i.Item1 == tbAlt.Text))
      {
          Alt.Remove(Alt.First(i => i.Item1 == tbAlt.Text));
          Alt.Add(new Tuple<string, string>(tbAlt.Text, "Something New"));
      }
      

      【讨论】:

        【解决方案4】:

        您的元组列表看起来很像字典。考虑改用它 - Dictionary&lt;string,string&gt; 。它已经具有按键检索值、删除值等方法

        如果同一个键可能有多个值,则可以使用 Lookup 类。

        【讨论】:

          【解决方案5】:

          看来第一个字符串必须是唯一的,否则您将找不到(单数)

          你为什么使用List&lt;Tuple&lt;string, string&gt;&gt;

          为什么不Dictionary&lt;string,string&gt;

          Dictionary&lt;TKey, TValue&gt;.ContainsKey 非常非常快。

          Dictionary.ContainsKey

          【讨论】:

          • 但是如果列表的顺序很重要怎么办。字典不能保证顺序。
          • @RayOldProf 如果您有问题,请将其作为问题发布
          猜你喜欢
          • 1970-01-01
          • 2017-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-30
          • 1970-01-01
          相关资源
          最近更新 更多