2011-11-08 28 views
0

今日の私の質問は
どのようにパターンに一致するすべての単語を見つけることができるでしょうか?構造体リスト内の単語を検索し、すべての単語を後置式で取得する

たとえば、単語:duckがあります。その単語から始まるすべての単語を検索します。

私は最高のパフォーマンス関数を探していますが、LINQを使用できるのであれば嬉しいです。

public List<List<string>> FindWordsPostfix(List<Parameters.Words> wordsChess, List<string> wordsFromDictionary, int width) 
    { 
     List<List<string>> listPostfixForstructxIndex = new List<List<string>>(); 

     foreach (Parameters.Words structx in wordsChess) 
     { 
      //1for each structx I have some parameters eg. name, length, index 
      //2for each word (name) I need find word from dict. starting that word(name) 

      //list storing lists of words for each of the structx object 
      List<string> list = new List<string>(); 

      foreach (String wordDictionary in wordsFromDictionary) 
      { 
       Match match = Regex.Match(wordDictionary, structx.word, RegexOptions.IgnoreCase); 
       if(match.Success && (match.Length > structx.length)) 
       { 
        list.Add(match.Value); 
       } 

      } 
      //add list of words to main list 
      listPostfixForstructxIndex.Add(list); 
     } 
     throw new NotImplementedException(); 
    } 

Parameters.Words含む構造体は、次のとおりです:string name, int length, etc.. は、これまでのところ私はそのようなこと(それはまだ動作しません)を作りました。

なぜ私の機能が悪く、データを格納していないのですか?

PS2。私はその質問を編集した。私はその混乱を取り除かなければならなかった。

+0

おそらく_helloing_が無効になっています。しかし、必要はありませんので、あなたはこんにちはとお言葉を言うことなくあなたの質問を書くことができます;) – Abel

+0

私はあなたがコードを読んだ後でも何をしようとしているのかよく分かりません。私は一連の文字やパターンで終わる言葉を探したいと思うが、リスト内にリストがある理由を理解していない。 – Dracorat

+0

@Dracorat私は自分の質問を編集することができます。私の英語があまりにも悪い場合は、私の質問を修正する必要があります。しかし、私はもう一度説明しよう:)これは例である:私は単語 'ban'を持っているので、' ban'で始まる全ての単語を見つけて、結果は次のようになる: 'List 'が格納されている: 'banner'' bans' '私はリストにリストを作成しました。リストの索引は別の機能で必要になります。それは違いない。 – deadfish

答えて

2
if(match.Success && (match.Length > struct.dlugosc)) 

マッチの長さが長い構造体の長さよりになるだろうことはありません - 最低でも構造体の長さは、文字列のことで、それに加えて内の他のすべてのアイテム。

試合後に何をテストしましたか.Success?

あなたは私はあなたが求めていると思う何のためにいくつかのマッチングコードをしたい場合は、以下の魅力を作品:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

using System.Text.RegularExpressions; 

namespace Word_Ending_Finder 
{ 
    public partial class Form1 : Form 
    { 
     private List<string> WordsToFind = new List<string>(); 
     private List<MySpecialStringStruct> PassagesToSearch = new List<MySpecialStringStruct>(); 

     public Form1() 
     { 
      InitializeComponent(); 
      PassagesToSearch.Add(new MySpecialStringStruct("This is a test passage with a test ending.", 0)); 
      PassagesToSearch.Add(new MySpecialStringStruct("This is a second test passage with a test ending.", 0)); 
      PassagesToSearch.Add(new MySpecialStringStruct("This is a third passage that won't match.", 0)); 

      WordsToFind.Add(@"ing\b"); 
      WordsToFind.Add(@"\bsecond\b"); 
      WordsToFind.Add(@"\bgarbage text\b"); 
     } 

     private void bnGo_Click(object sender, EventArgs e) 
     { 
      txtResults.Text = ""; 
      string Separator = "------------------------------------------"; 

      StringBuilder NewText = new StringBuilder(); 
      foreach (string SearchWord in WordsToFind) 
      { 
       NewText.AppendLine(string.Format("Now searching {0}", SearchWord)); 
       List<MatchValue> Results = FindPassages(PassagesToSearch, SearchWord); 
       if (Results.Count == 0) 
       { 
        NewText.AppendLine("No Matches Found"); 
       } 
       else 
       { 
        foreach (MatchValue ThisMatch in Results) 
        { 
         NewText.AppendLine(string.Format("In passage \"{0}\":", ThisMatch.WhichStringStruct.Passage)); 
         foreach (Match M in ThisMatch.MatchesFound) 
         { 
          NewText.AppendLine(string.Format("\t{0}", M.Captures[0].ToString())); 
         } 
        } 
       } 
       NewText.AppendLine(Separator); 
      } 

      txtResults.Text = NewText.ToString(); 
     } 

     private List<MatchValue> FindPassages(List<MySpecialStringStruct> PassageList, string WhatToFind) 
     { 
      Regex MatchPattern = new Regex(WhatToFind); 
      List<MatchValue> ReturnValue = new List<MatchValue>(); 
      foreach (MySpecialStringStruct SearchTarget in PassageList) 
      { 
       MatchCollection MatchList = MatchPattern.Matches(SearchTarget.Passage); 
       if (MatchList.Count > 0) 
       { 
        MatchValue FoundMatchResult = new MatchValue(); 
        FoundMatchResult.WhichStringStruct = SearchTarget; 
        FoundMatchResult.MatchesFound = MatchList; 
        ReturnValue.Add(FoundMatchResult); 
       } 
      } 
      return ReturnValue; 
     } 
    } 

    public class MatchValue 
    { 
     public MySpecialStringStruct WhichStringStruct; 
     public MatchCollection MatchesFound; 
    } 

    public struct MySpecialStringStruct 
    { 
     public string Passage; 
     public int Id; 

     public MySpecialStringStruct(string passage, int id) 
     { 
      Passage = passage; 
      Id = id; 
     } 
    } 
} 

出力:

Now searching ing\b 
In passage "This is a test passage with a test ending.": 
ing 
In passage "This is a second test passage with a test ending.": 
ing 
------------------------------------------ 
Now searching \bsecond\b 
In passage "This is a second test passage with a test ending.": 
second 
------------------------------------------ 
Now searching \bgarbage text\b 
No Matches Found 
------------------------------------------ 
+0

struct.dlugoscは、インデックスxの構造体の単語の長さです – deadfish

関連する問題