2012-05-04 7 views
0

次の形式のファイルは、異なる行に複数のエントリで構成されています。 DirectorName MovieName GrossRevenue。 例えばC#でファイルを解析するためのデータ構造

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

ディレクターの名前が繰り返さのでmovienameに(director1がdirector2と同じ名前の映画を指示することができます)しますか?ディレクターの総収入のような詳細を得る能力を提供しながら、ファイルを解析する最善の方法は何でしょうか。私は、外の辞書という監督の名のための鍵と内側の辞書という映画の名のためのキーと

Dictionary<string, Dictionary<string,long>> 

のような辞書の辞書のようなものを持つことを計画しました。私はカスタムクラス内で私の内側の辞書をラップすることで、この見栄えを良くすることができましたが、私はこの問題に対するより良いアプローチがあるのだろうかと思っていました。また、後で私のファイルにジャンル、俳優などの追加コンテンツが追加された場合、ジャンルや俳優別にグループ化する機能を提供しながら、完全な再設計は必要ありません。

+2

データベースとEntity Frameworkを使用する必要があります。 – SLaks

+0

私は、データベースにデータを格納することは問題を簡素化することを知っていますが、私はファイルとデータベースを解析することで動作するソリューションを探しています。私が考えることができるもう一つのソリューションは、3つのフィールド(名前、ムービー名と収益)のプロパティを持つクラスを作成し、オブジェクトを作成し、それらのオブジェクトのコレクションに対してlinqクエリを使用することです。 – nighthawk457

+1

あなたは、それは本当の苦痛になる階層的な解決策です。最初のステップは、エンティティとその関係を決定することです。 – yamen

答えて

1

辞書、汎用リストでカスタムクラスを使用できます。

あなたは簡単で作ることができ、あなたは監督の属性のいずれかの変更を行う必要がある場合、その後、将来的には、

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 

この方法を使用

public class Director { 

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

} 

のようなクラスを作成することができます問題なくクラスを更新します。

あなたの問題を解決することを願っています。

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} 
    ... 
} 

あなたは単にあなたがデフォルト参照をオーバーライドする必要があり、この作業を行うには、ディレクターのための一例

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 

それを照会することができMoviesのコレクションを持つクラスを追加しますMoviePersonの比較。

これは単なるアイデアです。あなたのニーズに合わせる必要があります。

これが役に立ちます。

関連する問題