-1

是否可以使用 LINQ 对 IEnumerable 列表中的项目进行排序?

例如:

        IEnumerable<sample> sam = new List<sample>()
        {
            new sample{ id = 1, name = "sample 1", list = new List<int>{5,6,1}},
            new sample{ id = 2, name = "sample 1", list = new List<int>{2,9}},
            new sample{ id = 3, name = "sample 1", list = new List<int>{8,3,7}},
            new sample{ id = 4, name = "sample 1", list = new List<int>{8,4,3}},
            new sample{ id = 5, name = "sample 1", list = new List<int>{5,1,7}},
            new sample{ id = 6, name = "sample 1", list = new List<int>{6,9,7}}
        };

上面给出的示例的预期输出将是 List 中的排序值。预期输出为:

sample{ id = 1, name = "sample 1", list = new List<int>{1,5,6}},
sample{ id = 2, name = "sample 1", list = new List<int>{2,9}},
sample{ id = 3, name = "sample 1", list = new List<int>{3,7,8},
sample{ id = 4, name = "sample 1", list = new List<int>{3,4,8}},
sample{ id = 5, name = "sample 1", list = new List<int>{1,5,7}},
sample{ id = 6, name = "sample 1", list = new List<int>{6,7,9}}

谢谢

4

3 回答 3

1

尝试,

 sam.All(p => { p.list.Sort(); return true; });
于 2012-09-03T02:16:18.833 回答
0

LINQ 的一般形式是它不会更改原始数据。例如,如果我们有一个列表

var ints = new  List<int>{5,6,1};

并使用 linq 对其进行“排序”

var sorted = ints.OrderBy();

我们最终得到两个列表

ints => { 5,6,1}
sorted => {1,5,6}

在您上面的示例中,这取决于您希望输出是什么

如果您想要一个列表排序的新样本列表,那么您可以使用

var newSampleList = samples.Select( sam => new Sample { 
                                                 id = sam.id, 
                                                 name = sam.name, 
                                                 list = new List<int>(sam.list.OrderBy())
                                   });

如果您不想创建一个新列表,但想对值进行排序,这并不是 LINQ 的真正用途,但可以使用 AVD 的答案来对每个成员执行功能(在这种情况下调用 Sort on名单)。

注意:这仅在 sample.list 被定义为 List() 时才有效,因为 Sort() 仅存在于 List<> 上。如果定义为 IList 或 IEnumerable,它将不起作用。

于 2012-09-03T09:01:29.237 回答
0
((List<sample>)sam).ForEach(s => s.list.Sort());
于 2012-09-03T02:56:37.770 回答