在IEnumerable <ienumerable <int>&gt; </ienumerable <int> </int>中对IEnumerable <int>进行排序

时间:2012-04-27 20:38:18

标签: linq c#-4.0 lambda

我有IEnumerable<IEnumerable<int>>类型的对象。我需要对内部IEnumerable<int>内的整数进行排序,但我不知道该怎么做。

我尝试将IEnumerable<IEnumerable<int>>转换为List<List<int>>,以便使用此代码更轻松地进行排序:

var sortedResults = results.ForEach(x => x.ToList());

但我收到错误“无法将void分配给隐式类型变量”

如果我同时进行排序和转换,我也会收到同样的错误:

var sortedResults = results.ToList().ForEach(x => x.ToList().Sort((a ,b) => a.CompareTo(b))));

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:6)

只需使用OrderBy - 因为这些是整数,这意味着您可以将数字本身用作标准:

sortedResults = results.Select(x => x.OrderBy(num => num));

以上假设您希望输出只需IEnumerable<IEnumerable<int>>,如果您需要列表,则需要使用ToList()

答案 1 :(得分:2)

var sortedResults = results.Select(list => list.OrderBy(x => x));

答案 2 :(得分:0)

我试图绘制一个如何使用IEnumerable订购的示例 我想我可以帮助你理解它是如何工作的。 观察这个例子,希望对你有所帮助 例如:

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        class Person
        {
            public string name { get; set; }
            public int personage { get; set; }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Person[] p ={new Person{name="Alice",personage=10 },
                         new Person{name="Alex",personage=11},
                         new Person{name="Danny",personage=12}};
            IEnumerable<Person> query = p.OrderBy(ps => ps.personage);
            foreach (Person item in query)
            {
                textBox1.Text += item.name + item.personage.ToString() + Environment.NewLine;
            }

        }

结果是:
  Alice10
  Alex11
  丹尼12