2014-04-26 198 views
2

我知道這是有點混亂,但我試圖解釋我的問題。按屬性排序列表,但隨機排序的屬性

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

集團的汽車,然後排序按隨機順序組,每個組選擇所有汽車:

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

正是我neeed! Thx man :) – Hlavson

+0

@Hlavson btw在C#中有很好的[Collection Initializers](http://msdn.microsoft.com/en-us/library/bb384062.aspx),你可以用它來以更簡單的方式創建和初始化集合 –

+1

它看起來不錯,乾淨。謝謝。 – Hlavson