0

異なる行の複数のエントリで構成される次の形式のファイルがあります。DirectorName MovieName GrossRevenue . 例えば

abc movie1 1mill
xyz movie2 2mill
abc movie3 1mill
abc movie2 4mill

監督名は繰り返され、映画名も繰り返されますか (director1 は director2 と同じ名前の映画を監督できますか)。ディレクターの総収益などの詳細を取得する機能を提供しながら、ファイルを解析する最良の方法は何でしょうか。私は辞書の辞書のようなものを持つことを計画していました

   Dictionary<string, Dictionary<string,long>> 

外部ディクショナリのキーは監督名であり、内部ディクショナリのキーは映画名です。内部ディクショナリをカスタム クラス内にラップすることで見栄えを良くすることができましたが、この問題に対するより良いアプローチがあるかどうか疑問に思っていました。また、後で私のファイルにジャンルや俳優などの追加コンテンツが追加された場合、ジャンルや俳優ごとにグループ化する機能を提供しながら、完全な再設計を行う必要がないように、これをどのように設計しますか?

4

2 に答える 2

1

ディクショナリを使用する代わりに、ジェネリック リストでカスタム クラスを使用できます。

次のようなクラスを作成できます

public class Director {

 public string StrDirector { get; set; }
 public string StrMovie { get; set; }
 public Long Revenue { get; set; }

}

次に、

List<Director> LstEntity = new List<Director>();
Director objDirector = new Director();
objDirector.StrDirector = "abc";
objDirector.StrMovie = "xyz";
objDirector.Revenue = 1000;
LstEntity.Add(objDirector);

//Add each Director Same way

このように、将来、ディレクターの属性を変更する必要がある場合は、クラスを更新するだけで問題なく簡単に行うことができます。

これで問題が解決することを願っています。

于 2012-05-04T20:45:50.557 に答える
1

最初にクラスを追加します

public class Movie
{
    public string MovieName {get;set;}
    public DateTime ProductionDate {get;set}
    public decimal Revenue  {get;set;}

    public List<MoviePerson> Stuff {get;set;}
}

public class MoviePerson
{
   public enum PersonType{Actor,Director, ....}

   public string Name {get;set;}
   public string Surname {get;set;}
   public PersonType Duty {get;set}
   ...
}

あなたのコレクションを持ってMoviesいると、ディレクターのクエリを簡単に実行できます。例

List<Movie> movies = new List<Movie>();
....

MoviePerson director = 
         new MoviePerson {Name = "James",
                                Surname = "Cameron", 
                                   PersonType = Director}
from movie in movies where movie.Stuff.Contains(director) select movie

これを機能させるには、 のデフォルトの参照比較をオーバーライドする必要がありますMoviePerson

これらは単なるアイデアです。必要に応じて調整する必要があります。

お役に立てれば。

于 2012-05-04T20:46:35.043 に答える