gpt4 book ai didi

c# - 按字符串数组过滤列表

转载 作者:行者123 更新时间:2023-11-30 21:00:22 26 4
gpt4 key购买 nike

我有一个 WinForms 应用程序,我想在其中使用文本框接收搜索查询(例如男士黑色 T 恤),然后根据此搜索查询过滤对象列表。

对象列表是订单对象。每个订单对象都有几个属性,例如性别、尺寸、颜色等。

如果我通过按空格字符拆分搜索查询得到一个字符串数组,那么根据列表中每个订单对象的每个属性搜索此字符串数组中的每个项目并返回匹配所有项的最佳方法是什么字符串数组中的字符串?

例如,如果我搜索“kids black medium”,我只想返回 kids AND black AND medium 的订单,所以我不想只返回黑色订单或只返回 kids order 等。

最佳答案

给定以下 Order 类:

class Order
{
public string Size {get; set;}
public string Gender {get; set;}
public string Colour {get; set;}
public string Type {get; set;}

// List of "searchable" properties
public IEnumerable<string> GetTags()
{
return new []{Size, Gender, Colour, Type};
}
}

一个简单的方法可能是这样的:

var list = new []
{
new Order {Size = "large", Gender = "women", Colour = "red", Type = "tshirt"},
new Order {Size = "large", Gender = "men", Colour = "black", Type = "tshirt"},
new Order {Size = "medium", Gender = "kids", Colour = "black", Type = "tshirt"},
new Order {Size = "medium", Gender = "kids", Colour = "black", Type = "shorts"},
new Order {Size = "medium", Gender = "men", Colour = "black", Type = "tshirt"}
};

var searchString = "kids black medium";
var searchValues = searchString.Split(new []{" "}, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray();

var result = from order in list
let tags = order.GetTags()
where searchValues.All(s => tags.Any(t => t == s))
select order;

result 现在包含

enter image description here

您也可以使用 IntersectHashSet 来比较搜索值/标签,但没有进一步的要求信息 All/Any 是一个足够好的解决方案恕我直言。

关于c# - 按字符串数组过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com