2011-09-22 95 views
1

我有一個列表,它充滿了字符串是這樣的:如何在列表中搜索<string>項目

List<string> data = new List<string>(); 
data.Add(itemType + "," + itemStock + "," + itemPrice); 

所以基本上是用逗號分隔3個字符串變量。

現在我想在此列表中搜索並刪除特定類型的項目。那就是我需要搜索列表視圖的哪些元素以所需的「itemType」開頭。

謝謝。

回答

6

要回答標題中的問題(「如何搜索...」),這將返回與所需物品的IEnumerable<string>

var itemsToRemove = data.Where(x => x.StartsWith(specificItemType + ",")); 

要回答你的問題的身體問題,你可以使用List(T).RemoveAll刪除的項目:

data.RemoveAll(x => x.StartsWith(specificItemType + ",")); 

不過,我建議你重新考慮你的數據結構。考慮創建一個類Item

public class Item { 
    public string Type { get; set; }  
    public int Stock { get; set; }  
    public decimal Price { get; set; } 

    public override string ToString() { 
     return itemType + "," + itemStock + "," + itemPrice; 
    } 
} 

然後這些數據結構添加到您的列表:

List<Item> data = new List<Item>(); 
data.Add(new Item {Type = itemType, Stock = itemStock, Price = itemPrice}); 

然後,你可以搜索,閱讀,格式化等,而不必訴諸字符串操作:

data.RemoveAll(x => x.Type == specificItemType); 
+0

那不是逗號必要嗎? 'x.StartsWith(specificItemType +「,」)' –

+0

@Banthar:謝謝,非常好。添加。但是,如果項目類型包含逗號,它仍然可能會產生錯誤的結果,這就是爲什麼我建議使用「安全」解決方案的原因。 – Heinzi

+0

感謝您提供更好的解決方案! –

2
var typematch = data.Where(t => t.StartsWith(itemType)).ToList(); 

將返回與指定類型開頭的字符串列表。

0

你想從列表中,以便刪除它們......

data.RemoveAll(x => x.StartsWith(itemType)); 
1

數據建立

List<string> data = new List<string>(); 
data.Add("Type1" + "," + "A" + "," + "A"); 
data.Add("Type2" + "," + "B" + "," + "B");  
string typeToExclude = "Type2"; 
int typeIndex = 0; 

過濾本身

var items = data.Where(
        x => x.Split(new char[] {','})[typeIndex] != typeToExclude);