首先包含和最佳匹配,然后是其他人,C#或Javascript

时间:2017-03-23 11:07:34

标签: c#

我有一个字符串列表,想要根据搜索过滤器(空格分割)过滤值,并按照给定的过滤器对结果进行排序。

List<string> all = new List<string>() { "Consultant", "QA Manager", "HR Manager", "Database Manager", "Architect", "Project Manager", "Project Coordinator" };
var filter = "Project Manager";
var  filterList = filter.Trim().Split(' ');
var matchProfiles=  all.Where(o => filterList.Contains(o));

现在结果是“QA经理”,“人力资源经理”,“数据库管理员”,“项目经理”,“项目协调员”。

问题是,我按照过滤器中的顺序要求结果,它应该是项目经理,然后是项目协调员,然后是经理特定的配置文件。

1 个答案:

答案 0 :(得分:1)

如果您希望过滤字符串按照过滤字的顺序排列,一种可能的解决方案是按顺序过滤它们,如下所示:

List<string> all = new List<string>() { "Consultant", "QA Manager", "HR Manager", "Database Manager", "Architect", "Project Manager", "Project Coordinator" };
var filter = "Project Manager";
var filterList = filter.Trim().Split(' ');
List<string> matchProfiles = new List<string>();
// First do exact match
matchProfiles.AddRange(all.Where(o => o.Contains(filter) && !matchProfiles.Contains(o)));

foreach (string filt in filterList)
{
    matchProfiles.AddRange(all.Where(o => o.Contains(filt) && !matchProfiles.Contains(o)));
}
//Result: "Project Manager,Project Coordinator,QA Manager,HR Manager,Database Manager"