按属性对列表进行排序,但使用该属性的随机顺序

本文关键字:属性 随机 顺序 列表 排序 | 更新日期: 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);