繁体   English   中英

在这种情况下,我应该使用哪种分类策略?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM