4

我创建了一个元组列表:

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

用户添加到此列表:

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

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

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

非常感谢您的帮助!

4

5 回答 5

5

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

你为什么用List<Tuple<string, string>>

为什么不Dictionary<string,string>呢?

Dictionary<TKey, TValue>.ContainsKey非常非常快。

Dictionary.ContainsKey

于 2013-06-19T17:21:16.317 回答
3

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

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

于 2013-06-19T16:48:07.680 回答
1

您可以使用List<T>.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);
}
于 2013-06-19T16:44:51.607 回答
1

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

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

来自评论:

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

于 2013-06-19T16:44:57.730 回答
1

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

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"));
}
于 2013-06-19T16:46:50.357 回答