按属性排序列表,但具有该属性的随机顺序

时间:2014-04-26 10:54:15

标签: c# list random

我知道这有点令人困惑,但我试着解释我的问题。

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
}

我想按制造商属性对列表进行排序,所以我这样做。

但我真正想要的是,按制造商排序,但随机顺序。 因此,宝马有时会成为第一,有时是福特,但是同时,同一制造商的汽车将是彼此相邻的。

希望我能解释一下。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

按制造商对汽车进行分组,然后按随机顺序对组进行排序,并从每个组中选择所有汽车:

var random = new Random();
var result = myCars.GroupBy(c => c.Man)
                   .OrderBy(g => random.Next())
                   .SelectMany(g => g);