【问题标题】:What sorting strategy should I use for this case?对于这种情况,我应该使用什么排序策略?
【发布时间】:2012-04-12 19:53:30
【问题描述】:

我有一个字符串列表,其中显示了电影所属类别的名称。我让一个类定义该列表,实现 List 和 IComparable 接口,以便在 PivotViewerStringProperty 中使用,如下所示:

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

这里的重点是一部电影应该属于许多类别,我想要一个排序策略,以便它可以制作 pivotviewer 并按每个类别对电影数据库进行排序。因此,它应该在应用程序运行时同时在两个或多个类别中显示同一部电影。

我应该使用什么排序策略?

【问题讨论】:

  • 你能给我们举一个更具体的例子吗?我认为您根本不想要 排序;我想你想要分组。但是没有例子就很难说。
  • 最终目的地是“分组”,是的。但是在开发方面,pivotviewer 要求用于属性的数据字段(StringProperty、NumericProperty、...)必须具有 Sort() 方法。这导致我使用 IComparable 接口实现 SLCategory,然后是 CompareTo 方法。所以我的问题现在指向该 CompareTo 方法。

标签: c# silverlight-5.0 icomparable pivotviewer


【解决方案1】:

假设我们有一些电影元数据:

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);
    }
}

或者,对类别进行分组而不是使用 distinct(尽管我觉得在这种情况下 distinct 更清晰 - 请注意,我最终不得不区分标题):

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);
    }
}

(注意:这里我提出了一种不同的方法。它可能不适用于您正在尝试做的事情,但我觉得我需要更多信息才能给出更好的答案。)

【讨论】:

    猜你喜欢
    • 2020-02-09
    • 2015-12-02
    • 2018-11-11
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多