方式:
1)刪除重複(我建議):
var filtered = pets.GroupBy(pet => pet.Price).Select(group => group.First());
2)排序& evalute - 設置爲空值來代替重複的,你想(你確定要設置空值而不是像1中那樣去除)?)。
var newPets = pets.OrderBy(per => pet.Price).ToList();
if (!newPets.Any()) return newPets;
var last = 0;
for (var i = 1; i < newPets.Count; i++)
{
if (newPets[i].Price == newPets[last].Price) newPets[i] = null;
else last = i;
}
return newPets;
我認爲,排序是在這種情況下,充足:O(n * log n) + O(n)
對O(n^2)
定製迭代搜索重複的每個元素。
3)傳統方法(不排序,最慢)
var newPets = pets.ToList();
for (var i = 0; i < newPets.Count; i++)
{
if (newPets[i] == null) continue;
var price = newPets[i].Price;
for (var j = i + 1; j < newPets.Count; j++)
{
if (newPets[j].Price == price) newPets[j] = null;
}
}
由於d士丹利已經注意到(但我已經錯過了它),你可能必須設置Price
到null
,而不是整個記錄。然後,簡單地將其更改爲decimal?
,然後寫入newPets[i].Price = null;
而不是空的整個記錄。
什麼樣的研究有你試圖找到解決這個問題的辦法嗎?您嘗試過哪些嘗試解決方案,以及您使用這些解決方案遇到了哪些問題? – Servy 2014-09-24 17:37:31
我發現了很多與IEnumerable匹配的需求。感謝您的反對票。 – NoviceDeveloper 2014-09-24 17:44:00
「刪除」和「將價格設置爲空」是兩個不同的東西 - 這是什麼? – 2014-09-24 17:50:32