【问题标题】:Sort list by property, but with random order of that property按属性排序列表,但该属性的顺序是随机的
【发布时间】:2014-06-12 03:43:58
【问题描述】:

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

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
}

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

但我真正想要的是,按制造商排序,但顺序随机。 所以有时宝马会先,有时福特会先,但一直以来,同一制造商的汽车会彼此相邻。

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

【问题讨论】:

    标签: c# list random


    【解决方案1】:

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

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

    【讨论】:

    • @Hlavson 顺便说一句,C# 中有很好的Collection Initializers,您可以使用它以更简单的方式创建和初始化集合
    • 它看起来很干净。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多