如何使用foreach C#对列表中的项进行排序

时间:2016-08-24 18:30:15

标签: c# list sorting foreach

我需要按照年龄使用foreach按升序对列表中的项目进行排序,因此我不知道如何操作。到目前为止,这是我的代码:

namespace ListProject
{
    public struct FamilyMem
    {
        public string name;
        public int age;

        public FamilyMem(string name,int age)
        {
            this.name = name;
            this.age = age;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            FamilyMem Jack = new FamilyMem("Jack", 15);
            FamilyMem Tom = new FamilyMem("Tommy", 24);
            FamilyMem Felix = new FamilyMem("Felix", 26);
            FamilyMem Lukas = new FamilyMem("Lukas", 26);
            FamilyMem Austin = new FamilyMem("Austin", 54);
            FamilyMem Ben = new FamilyMem("Ben", 55);

            List<FamilyMem> gambleList = new List<FamilyMem>();

            gambleList.Add(Jack);
            gambleList.Add(Tom);
            gambleList.Add(Felix);
            gambleList.Add(Lukas);
            gambleList.Add(Austin);
            gambleList.Add(Ben);

            Console.WriteLine(gambleList.Count.ToString());


        }
    }
} 

我还需要一段单独的代码,允许我按字母顺序对名称进行排序。谢谢。

3 个答案:

答案 0 :(得分:2)

当你使用foreach循环迭代它时,你不能编辑一个集合,所以这至少是不可能的。但是,您可以使用LINQ或一些for循环。使用类似的东西:

gambleList = gambleList.OrderBy(item => item.name).ToList();

顺便说一下,赋值的原因是OrderBy操作(例如,与Sort()方法不同)对集合进行排序 - 它返回一个引用已排序的集合。

您还可以使用标准for循环或递归函数来实现类似插入排序。

答案 1 :(得分:1)

我建议你去找Linq。只需简单地谷歌吧。 您可以使用OrderBy执行此操作,如下所示:

gambleList = gambleList.OrderBy(x => x.age).ToList();

答案 2 :(得分:0)

我建议你看看一些IEnumerable方法(https://msdn.microsoft.com/en-us//library/bb534966(v=vs.110).aspx)和一些例子:http://www.dotnetperls.com/sort

示例:

Pet[] pets = { new Pet { Name="Barley", Age=8 },
               new Pet { Name="Boots", Age=4 },
               new Pet { Name="Whiskers", Age=1 } };

IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);

foreach (Pet pet in query)
{
    Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}