問題是: 我們有模型id作爲函數的輸入參數,並且我們需要將車型中頂部的那個模型ID轉移到奢侈品=假。豪華車應保持在同一位置。c#基於屬性值重新排列類對象?
class Car
{
int ModelId;
bool IsLuxury;
}
樣車對象:
1. new Car(1, true)
2. new Car(19, true)
3. new Car(1, true)
4. new Car(7, true)
5. new Car(8, false)
6. new Car(9, false)
7. new Car(1, false)
8. new Car(25, false)
9. new Car(9, false)
10. new Car(1, false)
例如,如果輸入modelId = 1,列表順序應該像改變:
1. new Car(1, true)
2. new Car(19, true)
3. new Car(1, true)
4. new Car(7, true)
5. new Car(1, false)
6. new Car(1, false)
7. new Car(8, false)
8. new Car(9, false)
9. new Car(25, false)
10. new Car(9, false)
與豪華的轎車=真正保持在同一等級[排名1到4],
汽車與modelId = 1(輸入)和IsLuxury = false採取下一個職位,
和其他汽車隨後進來(型號不是1和IsLuxury = false)。
我想用C#編寫它。我有一個解決方案,它返回我正確的答案,但我不確定其性能。
var res = lst.Where(c => c.IsLuxury== true)
.Concat(lst.Where(c => c.ModelId == 1 && c.IsLuxury== false))
.Concat(lst.Where(c => c.ModelId != 1 && c.IsLuxury== false)).ToList();
有人可以建議在C#中的其他方式,或使用LINQ來實現這個更好的方式嗎?
您可以創建一個自定義的類,它實現[IComparer的]( https://msdn.microsoft.com/en-us/library/bb549422(v=vs.110).aspx),然後調用'lst.OrderBy(c => c,new CustomComparer())'。 –
itsme86
我真的不明白訂單的標準。根據車型ID,你似乎沒有真正對車進行分類。這僅僅是Id == 1的特例嗎?因爲地方9和10沒有排序... –
你可以添加一些代碼嗎? – maverick