2017-03-23 4 views
-1

私は1つの文字列リストを持っており、検索フィルター(スペースで分割)に基づいて値をフィルターに掛け、与えられたフィルターごとに結果を並べ替える必要があります。最初にConatinsとベストマッチする、C#またはjavascript

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マネージャ」、「HRマネージャ」、「データベースマネージャ」、「プロジェクトマネージャ」、「プロジェクトコーディネータ」の順になっています。

ここに問題があります。私はフィルターで指定された順番で結果を要求します。プロジェクトマネージャーとプロジェクトコーディネーター、そしてマネージャー固有のプロファイルが必要です。

この点で助けが必要です。

答えて

0

あなたは、フィルタの単語の順番であなたのフィルタ文字列をしたい場合は、一つの可能​​な解決策を順番にループ内でそれらをフィルタであり、このような何か:

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" 
+0

私はあなたが理解していないと思います@NaumanSharif。ループはフィルタワードでのみ作成されます。したがって、フィルタが「プロジェクトマネージャ」の場合、数千のレコードがあるにもかかわらず、2回だけ実行されます。 – Pikoh

+0

はい、正しくあります。タクシー:) –

関連する問題