[英]What sorting strategy should I use for this case?
我有一个字符串列表,列出了电影所属的类别的名称。 我使一个类定义该列表,实现List <String>和IComparable接口,以便在PivotViewerStringProperty中使用,如下所示:
public class SLCategoryList : List<String>, IComparable
{
public int CompareTo(object obj)
{
return this[0].CompareTo((obj as SLCategoryList)[0]);
}
}
这里的重点是电影应该属于许多类别,我想要一种分类策略,以便它可以使数据透视查看器并对每个类别的电影数据库进行分类。 因此,当应用程序运行时,它应该一次显示两个或更多类别的同一部电影。
我应该使用哪种分类策略?
假设我们有一些电影元数据:
class MovieMetaData
{
public string Title { get; set; }
public List<string> Categories { get; set; }
}
IEnumerable<MovieMetaData> movies = /* Some initialization. */;
我会以两种(非常相似)的方式之一将电影分组:
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);
}
}
(注意:这里我建议了一种不同的方法。它可能无法与您尝试做的事情一起使用,但是我认为我需要更多信息才能给出更好的答案。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.