-6

重複の可能性:
LINQ C# による単語の出現によるリストの並べ替え

ここに同様の質問を投稿しましたが、うまくいかない回答がありました。これが私がソートする必要があるデータです。

  ID     Title
  ---    ------
  1      JCB Excavator - ECU P/N: 728/35700
  2      Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899
  3      Geo Prism 1995 - Geo ABS #16213899
  4      Geo Prism 1995 - ABS #16213899
  5      Wie man BBA reman erreicht
  6      this JCB test JCB
  7      Ersatz Airbags, Gurtstrammer und Auto Körper Teile

私の検索データは「JCB GEO」のようなものです。データが次のようになるように並べ替えたい

  ID     Title
  ---    ------
  2      Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899
  3      Geo Prism 1995 - Geo ABS #16213899
  4      Geo Prism 1995 - ABS #16213899
  6      this JCB test JCB
  1      JCB Excavator - ECU P/N: 728/35700
  5      Wie man BBA reman erreicht
  7      Ersatz Airbags, Gurtstrammer und Auto Körper Teile

最初に来る行は、データの時間が最大の行です。したがって、GEOの場合、ほとんどの行でワードの時間が最大になります。ID 2 には最大時間、GEO という単語があり、次の行には 2 つの Geo 単語があります...

私はこの質問を投稿し、以下の回答を得たと言いましたが、うまくいきません。

List<SearchResult> list = new List<SearchResult>() {
  new SearchResult { Description = "JCB Excavator - ECU P/N: 728/35700" },
  new SearchResult { Description = "Geo Prism 1995 - ABS #16213899" },
  new SearchResult { Description = "Geo Prism 1995 - ABS #16213899" },
  new SearchResult { Description = "Geo Prism 1995 - ABS #16213899" },
  new SearchResult { Description = "Wie man BBA reman erreicht" },
  new SearchResult { Description = "this test JCB" },
  new SearchResult { Description = "Ersatz Airbags, Gurtstrammer und Auto Körper  Teile"   }            
};
var wordsToFind = "Geo JCB".Split();
var values = list.Select(x => new { SearchResult = x, Count = x.Description.Split(' ')
  .Where(c => wordsToFind .Contains(c)).Count() })
  .OrderByDesending(x => x.Count)
  .Select(x => x.SearchResult);
4

1 に答える 1

0

たぶん、あなたはこの方法でそれを行うことができますか?テストに使用したメインコンソールプログラム

static void Main(string[] args)
        {
            var list = SearchResult.GetResult();
            var wordArray = "Geo,JCB".Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            list.Sort((a, b) => {
                int sum1 = 0, sum2=0;
                foreach (var item in wordArray)
                {
                    sum1 += Regex.Matches(a.Description, item).Count;
                    sum2 += Regex.Matches(b.Description, item).Count;
                }

                if (sum1 < sum2) return 1;
                else if (sum1 > sum2) return -1;
                else return 0;
            });
            foreach (var item in list)
            {
                Console.WriteLine(item.Description);
            }
            Console.ReadKey();
        }

検索結果クラス

public class SearchResult
    {
        public string Description { get; set; }
        public static List<SearchResult> GetResult()
        {
            var list = new List<SearchResult>()
            {
                new SearchResult(){Description = "JCB Excavator - ECU P/N: 728/35700"},
                new SearchResult(){Description = "Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899"},
                new SearchResult(){Description = "Geo Prism 1995 - Geo ABS #16213899"},
                new SearchResult(){Description = "Geo Prism 1995 - ABS #16213899"},
                new SearchResult(){Description = "Wie man BBA reman erreicht"},
                new SearchResult(){Description = "this JCB test JCB"},
                new SearchResult(){Description = "Ersatz Airbags, Gurtstrammer und Auto Körper  Teile"}
            };
            return list;
        }
    }


あなたが尋ねたことに対して適切な出力を返す...

Geo Prism 1995 Geo cart Geo001 -Geo ABS #16213899
Geo Prism 1995 - Geo ABS #16213899
this JCB test JCB
Geo Prism 1995 - ABS #16213899
JCB Excavator - ECU P/N: 728/35700
Ersatz Airbags, Gurtstrammer und Auto Körper  Teile
Wie man BBA reman erreicht
于 2012-07-09T11:06:04.830 に答える