我有一個列表,它充滿了字符串是這樣的:如何在列表中搜索<string>項目
List<string> data = new List<string>();
data.Add(itemType + "," + itemStock + "," + itemPrice);
所以基本上是用逗號分隔3個字符串變量。
現在我想在此列表中搜索並刪除特定類型的項目。那就是我需要搜索列表視圖的哪些元素以所需的「itemType」開頭。
謝謝。
我有一個列表,它充滿了字符串是這樣的:如何在列表中搜索<string>項目
List<string> data = new List<string>();
data.Add(itemType + "," + itemStock + "," + itemPrice);
所以基本上是用逗號分隔3個字符串變量。
現在我想在此列表中搜索並刪除特定類型的項目。那就是我需要搜索列表視圖的哪些元素以所需的「itemType」開頭。
謝謝。
要回答標題中的問題(「如何搜索...」),這將返回與所需物品的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);
var matches = data.Where(d => d.StartsWith(itemType));
您還可以使用RemoveAll with a predicate condition:
data.RemoveAll(d => d.StartsWith(itemType));
var typematch = data.Where(t => t.StartsWith(itemType)).ToList();
將返回與指定類型開頭的字符串列表。
你想從列表中,以便刪除它們......
data.RemoveAll(x => x.StartsWith(itemType));
數據建立
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);
那不是逗號必要嗎? 'x.StartsWith(specificItemType +「,」)' –
@Banthar:謝謝,非常好。添加。但是,如果項目類型包含逗號,它仍然可能會產生錯誤的結果,這就是爲什麼我建議使用「安全」解決方案的原因。 – Heinzi
感謝您提供更好的解決方案! –