2017-07-04 30 views
-2

これは、いくつかの単語を追加し、最後の2つの方法で戻るIEnumerableインターフェイスです。辞書の実装インターフェイス

ここでのアイデアは、各単語を同義語である単語のリストに関連付ける辞書を持っていることです。 AddSynonymsメソッドはシノニムの列挙をとり、重複がある場合に備えて一意の単語のリストを作成することから始まります。次に、各単語を調べ、既に追加されているかどうかを確認します。そうであれば、その単語のすべての同義語(単語リストから単語を差し引いたもの)を通り、それらがその単語に関連付けられたリスト内にあるかどうかを調べる。一致しない場合は、シノニムがリストに追加されます。単語が既に辞書にない場合、その単語は同義語のリスト(単語リストから単語を除いて)とともに追加されます。

GetSynonymnsメソッドは、指定された単語に関連付けられたListを返します。単語がシソーラスにない場合は、空の列挙が返されます(必要に応じて例外をスローするように変更できます)。

GetWordsメソッドは、追加されたすべての単語になるDicitionaryのすべてのキーを返します。

summary> 
/// Represents a thesaurus. 
/// </summary> 
public interface IThesaurus 
{ 
/// <summary> 
/// Adds the given synonyms to the thesaurus 
/// </summary> 
/// <param name="synonyms">The synonyms to add.</param> 
void AddSynonyms(IEnumerable<string> synonyms); 

/// <summary> 
/// Gets the synonyms for a given word. 
/// </summary> 
/// <param name="word">The word the synonyms of which to get.</param> 
/// <returns>A <see cref="string"/> with all synonyms for the given word.</returns> 
IEnumerable<string> GetSynonyms(string word); 

/// <summary> 
/// Gets all words from the thesaurus. 
/// </summary> 
/// <returns>An <see cref="IEnumerable<string>"/> containing 
/// all the words in the thesaurus.</returns> 
IEnumerable<string> GetWords(); 

}}

これは私が得ているか離れているが、これで立ち往生しているようです。プログラムは正しくコンパイルされません。私はobj.GetSynonyms();で自分のメソッドを呼び出すことができません。私の公開シソーラスクラスの下にAthのIEnumerable GetWords(){return lookup.Keys(); }}動作しませんなぜ動作しないのか分かりません。私は実際にコードで問題を見つけることはできません。

namespace Thesaurus 
{ 
    public interface IThesaurus 
    { 
     IEnumerable<string> AddSynonyms(); 
     IEnumerable<string> GetSynonyms(string word); 

     IEnumerable<string> GetWords(); 
} 


public class Thesaurus : IThesaurus 
{ 
    private Dictionary<string, List<string>> lookup = 
     new Dictionary<string, List<string>>(); 

    public IEnumerable<string> AddSynonyms() //public void AddSynonyms(IEnumerable<string> synonyms) 
    { 
     var words = AddSynonyms.Distinct().ToList(); 
     foreach (var word in words) 
     { 
      var currentWordSynonyms = words.Where(s => s == word); 
      if (lookup.ContainsKey(word)) 
      { 
       foreach (var synonym in currentWordSynonyms) 
       { 
        if (!lookup[word].Contains(synonym)) 
         lookup[word].Add(synonym); 
       } 
      } 
      else 
      { 
       lookup.Add(word.currentWordSynonyms); 
      } 

     } 
    } 

    public IEnumerable<string> GetSynonyms(string word) 
    { 
     if (lookup.ContainsKey(word)) 
      return lookup[word]; 
     return Enumerable.Empty<string>(); 
     // Or throw an exception. 
    } 

    public IEnumerable<string> GetWords() 
    { 
     return lookup.Keys(); 
    } 
} 

class MainClass 
{ 

    static void Main() 
    { 
     // Declare an interface instance. 
     IThesaurus obj = new Thesaurus(); 


     // Call the member. 
     obj.AddSynonyms(); 
     obj.GetSynonyms(); 
     obj.GetWords(); 
    } 
} 

}

+1

?明確ではない。 – jdweng

+0

@jdweng プログラムは正しくコンパイルされません。 私のメソッドをobj.GetSynonyms();で呼び出すことができません。 アト私の公共シソーラスクラスの下 公共のIEnumerable GetWords(){ リターンlookup.Keys(); } } なぜ動作しないのか分かりません。私は実際にコードで問題を見つけることはできません。 –

+0

あなたの質問の情報を質問テキストに追加することをお勧めします。 – perfect5th

答えて

0

ガットコンパイラエラーアウト:

あなたが立ち往生している
using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 


namespace Thesaurus 
{ 


    class MainClass 
    { 

     static void Main(string[] args) 
     { 
      // Declare an interface instance. 
      IThesaurus obj = new Thesaurus(); 
      List<string> words = new List<string>(); 

      // Call the member. 
      obj.AddSynonyms(words); 
      obj.GetSynonyms(words[0]); 
      obj.GetWords(); 
     } 
    } 
    //<summary> 
    /// Represents a thesaurus. 
    /// </summary> 
    public interface IThesaurus 
    { 
     /// <summary> 
     /// Adds the given synonyms to the thesaurus 
     /// </summary> 
     /// <param name="synonyms">The synonyms to add.</param> 
     void AddSynonyms(IEnumerable<string> synonyms); 

     /// <summary> 
     /// Gets the synonyms for a given word. 
     /// </summary> 
     /// <param name="word">The word the synonyms of which to get.</param> 
     /// <returns>A <see cref="string"/> with all synonyms for the given word.</returns> 
     IEnumerable<string> GetSynonyms(string word); 

     /// <summary> 
     /// Gets all words from the thesaurus. 
     /// </summary> 
     /// <returns>An <see cref="IEnumerable<string>"/> containing 
     /// all the words in the thesaurus.</returns> 
     IEnumerable<string> GetWords(); 
    } 

    public class Thesaurus : IThesaurus 
    { 
     private Dictionary<string, List<string>> lookup = 
      new Dictionary<string, List<string>>(); 



     public void AddSynonyms(IEnumerable<string> allWords) //public void AddSynonyms(IEnumerable<string> synonyms) 
     { 
      var words = allWords.Distinct().ToList(); 
      foreach (var word in words) 
      { 
       var currentWordSynonyms = words.Where(s => s == word); 
       if (lookup.ContainsKey(word)) 
       { 
        foreach (var synonym in currentWordSynonyms) 
        { 
         if (!lookup[word].Contains(synonym)) 
          lookup[word].Add(synonym); 
        } 
       } 
       else 
       { 
        List<string> newSynonyms = new List<string>(); 
        newSynonyms.AddRange(currentWordSynonyms); 
        lookup.Add(word, newSynonyms); 
       } 

      } 
     } 

     public IEnumerable<string> GetSynonyms(string word) 
     { 
      if (lookup.ContainsKey(word)) 
       return lookup[word]; 
      return Enumerable.Empty<string>(); 
      // Or throw an exception. 
     } 

     public IEnumerable<string> GetWords() 
     { 
      return lookup.AsEnumerable().Select(x => x.Key).ToList(); 
     } 
    } 


} 
+0

コンパイルしようとすると、obj.GetSynonyms(words [0]);それが動作することを除いて。 –

+0

ありますか:using System.Collections。新しいプロジェクトが作成されるとき、通常はデフォルトではありません。 – jdweng

+0

単語をリストに追加しましたか? – jdweng

関連する問題