2012-04-12 7 views
0

私は、映画が属するカテゴリの名前を表す文字列のリストを持っています。私は、クラスは以下のようにPivotViewerStringPropertyで使用するためには、リストに<文字列>とIComparableインターフェイスを実装し、そのリストを定義しますこのケースではどのソート戦略を使用しますか?

public class SLCategoryList : List<String>, IComparable 
{ 
    public int CompareTo(object obj) 
    { 
     return this[0].CompareTo((obj as SLCategoryList)[0]); 
    } 
} 

ここでのポイントは、フィルムは多くのカテゴリに属している必要がありますされ、私はソートをしたいですそれによってピボットビューアを作成し、各カテゴリ別の映画データベースをソートすることができます。したがって、アプリケーションが実行されているときに、2つ以上のカテゴリに同じフィルムを一度に表示する必要があります。

どのような分類方法を使用しますか?

+4

もっと具体的な例を教えてください。私はあなたが*ソートしたくないと思う。私はグループ化をしたいと思う*。しかし、例がなければ言うことは難しいです。 –

+0

最終的な宛先は「グループ化」です。しかし、開発面では、ピボットビューアーはプロパティ(StringProperty、NumericProperty、...)に使用されるデータフィールドにSort()メソッドが必要です。それはIComparableインターフェイスでSLCategoryを実装し、次にCompareToメソッドです。ですから、私の問題は、現在、CompareToメソッドを指しています。 – ducnh

答えて

1

のは、我々はいくつかの映画のメタデータを持っていると仮定しましょう:

class MovieMetaData 
{ 
    public string Title { get; set; } 
    public List<string> Categories { get; set; } 
} 

IEnumerable<MovieMetaData> movies = /* Some initialization. */; 

Iだろうグループ2(非常に似ている)のいずれかの方法で私の作品:

var categories = movies.SelectMany(m => m.Categories).Distinct(); 
var groups = categories 
    .Select(c => Tuple.Create(c, movies 
      .Where(m => m.Categories.Contains(c)) 
      .OrderBy(m => m.Title))); 


foreach (var category in groups) 
{ 
    Console.WriteLine("Category: {0}", category.Item1); 

    foreach (var movie in category.Item2) 
    { 
     Console.WriteLine(movie.Title); 
    } 
} 

または、グループカテゴリをではなく、使用して(私はこのケースではっきりしていると感じますが、とにかくタイトルを区別しなければならないことになります)。

var categories = movies.SelectMany(m => m.Categories); 
var groups = categories 
    .Select(c => Tuple.Create(c, movies 
      .Where(m => m.Categories.Contains(c)) 
      .OrderBy(m => m.Title))) 
    .GroupBy(g => g.Item1); 


foreach (var category in groups) 
{ 
    Console.WriteLine("Category: {0}", category.Key); 

    foreach (var movie in category.SelectMany(c => c.Item2).Select(m => m.Title).Distinct()) 
    { 
     Console.WriteLine(movie); 
    } 
} 

(注:ここでは別のアプローチを提案しています。あなたがしようとしているものではうまくいかないかもしれませんが、私はより良い答えを得るためにもっと情報が必要だと感じています)。

関連する問題