Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于这个案例,我应该使用什么排序策略?_C#_Silverlight 5.0_Icomparable_Pivotviewer - Fatal编程技术网

C# 对于这个案例,我应该使用什么排序策略?

C# 对于这个案例,我应该使用什么排序策略?,c#,silverlight-5.0,icomparable,pivotviewer,C#,Silverlight 5.0,Icomparable,Pivotviewer,我有一个字符串列表,显示电影所属类别的名称。我让一个类定义该列表、实现列表和IComparable接口,以便在PivotViewerStringProperty中使用,如下所示: public class SLCategoryList : List<String>, IComparable { public int CompareTo(object obj) { return this[0].CompareTo((obj as SLCategoryLi

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

public class SLCategoryList : List<String>, IComparable
{
    public int CompareTo(object obj)
    {
        return this[0].CompareTo((obj as SLCategoryList)[0]);
    }
}
公共类SLCategoryList:列表,IComparable
{
公共整数比较(对象对象对象)
{
返回此[0]。比较((对象作为SLCategoryList)[0]);
}
}
这里的重点是一部电影应该属于许多类别,我需要一个排序策略,这样它就可以制作pivotviewer,并按每个类别对电影数据库进行排序。因此,当应用程序运行时,应同时在两个或多个类别中显示同一影片


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

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

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

IEnumerable<MovieMetaData> movies = /* Some initialization. */;
或者,对类别进行分组,而不是使用distinct(尽管我觉得在这种情况下distinct更干净-注意,我最终还是必须区分标题):


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

您能给我们一个更具体的例子吗?我认为你根本不需要分类;我想你需要分组。但很难说没有一个例子。最终的目的是“分组”,是的。但在开发方面,pivotviewer要求用于属性(StringProperty、NumericProperty,…)的数据字段必须具有Sort()方法。这导致我使用IComparable接口实现SLCategory,然后是CompareTo方法。所以我现在的问题是指向那个比较法。
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);
    }
}