2016-10-09 17 views
0

文字列から部分文字列を検索し、最も一致する部分文字列を取得します。文字列の比較、最も類似したものを返します

string [] allModels = { "Galaxy", "S3", "Galaxy S3" }; 
string title = "Samasung galaxy s3 is for sale"; 
string[] title_array = title.Split(' '); 
string model = ""; 
foreach(var tit in title_array) 
{ 
     foreach(var mod in allModels) 
     { 
      if (mod.Equals(tit, StringComparison.OrdinalIgnoreCase)) 
      { 
        model = mod; 
      } 
     } 
} 

選択されたモデルはGalaxyですが、私はGalaxy S3(すなわち、最も類似している)必要があります。どうすればGalaxy S3を入手できますか?

Array.FindAll(target)の方法を使用しますか?

更新:most similarことで

は、私は、文字列(タイトル)から最も一致する部分文字列(モデル)を意味

例えば、galaxy Samasung s3 is for saleにモデルは(allModels配列上記による)galaxy s3する必要があります

答えて

0

Most similar?

...私はあなたが最長一致をしたい推測う Search substrings from a string and get a substring that matches the most!である必要はありません。
string[] allModels = { "Galaxy", "S3", "Galaxy S3" }; 
string title = "Samasung galaxy s3 is for sale"; 

var mod = allModels.OrderByDescending(x => x.Length) 
      .FirstOrDefault(x => title.IndexOf(x,StringComparison.OrdinalIgnoreCase)>=0); 
+0

'allModels'には' Length'の定義が含まれていません。エラー –

+0

@IrfanWattooコードを正しくコピーする、私は* allModelsのために* Length *を使用しないBTW:投稿する前に上記のコードを実行する: –

+0

私の間違いを申し訳なく思うが、タイトルは 'galaxy Samasung s3のために売っている' 。この場合、コードは機能しません。 –

0

タイトルのほとんどの単語を含むモデルを見つける方法です。

var allModelsList = new List<String>(allModels); 
var titles = new List<String>(title_array); 
allModelsList.OrderByDescending(model => titles.Where(title => title.Equals(model, StringComparison.OrdinalIgnoreCase)).Count()).FirstOrDefault(); 
+0

親切に更新された質問を参照してください。 「ギャラクシーS5ネオ」を見つけなければならないとすれば、「サムスンギャラクシーネオS5」販売 –

+0

から?これは私のアルゴリズムで動作します。実際には、検索文字列は3つの一致を持ち、潜在的に最初のものになります。 解決済みの解決策は見つからないでしょう... –

関連する問題