我需要按照年龄使用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());
}
}
}
我还需要一段单独的代码,允许我按字母顺序对名称进行排序。谢谢。
答案 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);
}