为了账号安全,请及时绑定邮箱和手机立即绑定

比较用户的两个列表

比较用户的两个列表

C#
当年话下 2022-12-24 12:44:18
我有一个预定义的列表 List words.Say 它有 7 个元素:List<string> resourceList={"xyz","dfgabr","asxy", "abec","def","geh","mnbj"}比方说,用户输入“xy+ab”,即他想搜索“xy”或“ab”string searchword="xy+ ab";然后我必须在预定义列表中找到所有具有“xy”或“ab”的单词,即所有被“+”分割的单词因此,输出将具有:{"xyz","dfgabr","abec",""}我正在尝试类似的东西:resourceList.Where(s => s.Name.ToLower().Contains(searchWords.Any().ToString().ToLower())).ToList()但是,我无法构建 LINQ 查询,因为有 2 个数组,我看到的一种方法是连接 2 个数组,然后尝试;但是由于我的第二个数组只包含第一个数组的一部分,所以我的 LINQ 不起作用。
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

您需要先将搜索模式与+符号分开,然后您可以轻松找出列表中哪些项目包含您的搜索模式,

var result = resourceList.Where(x => searchword.Split('+').Any(y => x.Contains(y.Trim()))).ToList();

在哪里:

resourceList的是

List<string> resourceList = new List<string> { "xyz", "dfgabr", "asxy", "abec", "def", "geh", "mnbj" };

搜索模式是,

string searchword = "xy+ ab";

输出:(来自调试器)

//img1.sycdn.imooc.com//63a683b90001e6f702060108.jpg

查看完整回答
反对 回复 2022-12-24
?
长风秋雁

TA贡献1757条经验 获得超7个赞

尝试以下不需要 Regex :


            List<string> resourceList= new List<string>() {"xyz","dfgabr","asxy","abec","def","geh","mnbj"};

            List<string> searchPattern = new List<string>() {"xy","ab"};


            List<string> results = resourceList.Where(r => searchPattern.Any(s => r.Contains(s))).ToList();



查看完整回答
反对 回复 2022-12-24
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您可以尝试在Linq的帮助下进行查询:


List<string> resourceList = new List<string> {

  "xyz", "dfgabr", "asxy", "abec", "def", "geh", "mnbj"

};


string input = "xy+ ab";


string[] toFind = input

  .Split('+')

  .Select(item => item.Trim()) // we are looking for "ab", not for " ab"

  .ToArray();


// {"xyz", "dfgabr", "asxy", "abec"}

string[] result = resourceList

  .Where(item => toFind

     .Any(find => item.IndexOf(find) >= 0))

  .ToArray();

 

// Let's have a look at the array

Console.Write(string.Join(", ", result));

结果:


xyz, dfgabr, asxy, abec

如果要忽略大小写,请将StringComparison.OrdinalIgnoreCase参数添加到IndexOf


string[] result = resourceList

  .Where(item => toFind

     .Any(find => item.IndexOf(find, StringComparison.OrdinalIgnoreCase) >= 0))

  .ToArray();


查看完整回答
反对 回复 2022-12-24
  • 3 回答
  • 0 关注
  • 48 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信