如何在列表中搜索<;字符串>;项目

本文关键字:lt gt 项目 字符串 搜索 列表 | 更新日期: 2023-09-27 18:09:33

我有一个列表,里面装满了这样的字符串:

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与谓词条件一起使用:

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

将返回一个以指定类型开头的字符串列表。

数据设置

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

您想从列表中删除它们,所以…

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