2013-06-19 27 views
2

元組的列表中刪除元組我創建的元組的列表:找到並從C#4.0

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

用戶添加到這個列表:

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

什麼是找到最好的辦法一個基於第一個字符串(即tbAlt.Text)的Tuple並刪除它或修改第二個字符串?

我是新來使用元組和列表:)

非常感謝您的任何幫助!

回答

3

它出現的第一個字符串必須是唯一的,你不會找到一個(單數)

你爲什麼要使用List<Tuple<string, string>>

爲什麼不是Dictionary<string,string>

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

Dictionary.ContainsKey

+0

但是,如果列表的順序很重要。字典不能保證順序。 – RayOldProf

+0

@RayOldProf如果您有任何問題,請將其作爲問題發佈 – Paparazzi

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); 
} 
1

查找元組(Item1):

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

從評論:

不能修改第二項(Item2)的價值,因爲元組是不可變的,所以你必須刪除它並重新添加。

+0

元組是不可變的 - 你可以不設置'Item2':http://msdn.microsoft.com/en-us/library/dd386892.aspx這就是爲什麼我用'FindIndex'代替LINQ (所以你可以替換列表中的整個元組) –

+0

Ops,謝謝@ReedCopsey,如果你需要維護元組的順序是合理的,否則刪除舊的和添加新的元組也應該這樣做。 – Zbigniew

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")); 
} 
3

您的元組列表看起來很像字典。考慮使用它 - Dictionary<string,string>。它已經有了通過密鑰來取回價值,刪除它,e.t.c的方法。

如果同一個鍵可能有多個值,則可以使用Lookup類。