按属性对列表进行排序,但使用该属性的随机顺序
本文关键字:属性 随机 顺序 列表 排序 | 更新日期: 2023-09-27 18:00:21
我知道这有点令人困惑,但我试图解释我的问题。
public enum Manufacturer { Bmw, Ford, Volvo };
public class Car
{
public Car(Manufacturer man, string name)
{
this.Man = man;
this.Name = name;
}
public Manufacturer Man { get; set; }
public string Name { get; set; }
}
//Program
private static void Main(string[] args)
{
List<Car> myCars = new List<Car>();
Car a = new Car(Manufacturer.Bmw, "M6");
Car b = new Car(Manufacturer.Ford, "Focus");
Car c = new Car(Manufacturer.Bmw, "i8");
Car d = new Car(Manufacturer.Ford, "Mondeo");
Car e = new Car(Manufacturer.Volvo, "XC60");
myCars.Add(a);
myCars.Add(b);
myCars.Add(c);
myCars.Add(d);
myCars.Add(e);
myCars = myCars.OrderBy(x => x.Man).ToList(); //Not exactly what i need
}
我想按制造商属性对我的列表进行排序,所以我这样做。
但我真正想要的是,按制造商排序,但有随机顺序。所以,有时宝马会排在第一位,有时福特会排在第二位,但一直以来,同一制造商的汽车都会排在一起。
希望我能解释一下。谢谢你的帮助。
按制造商对汽车进行分组,然后按随机顺序对各组进行排序,并从每组中选择所有汽车:
var random = new Random();
var result = myCars.GroupBy(c => c.Man)
.OrderBy(g => random.Next())
.SelectMany(g => g);