標題可能會產生誤導,這樣的例子:刪除「重複」
我有一個類:
class Pair
{
Book Book1;
Book Book2;
}
我有這些列表:
var list = new List<Pair>();
list.Add(new Pair() {
Book1 = new Book() { Id = 123 },
Book2 = new Book() { Id = 456 }
});
list.Add(new Pair() {
Book1 = new Book() { Id = 456 },
Book2 = new Book() { Id = 123 }
});
現在,儘管書被「翻轉」,我的系統應該將這些視爲重複。
我需要一個方法來從列表中刪除這些'duplicates'中的一個一個(任何一個 - 所以我們假設第一個使它簡單)。
我已經試過
var tempList = new List<Pair>();
tempList.AddRange(pairs);
foreach (var dup in pairs)
{
var toRemove = pairs.FirstOrDefault(o => o.Book1.Id == dup.Book2.Id
&& o.Book2.Id == dup.Book1.Id);
if (toRemove != null)
tempList.Remove(toRemove);
}
return tempList;
這不返回任何項目(假設上面的例子),因爲這兩個Pair
對象將滿足拉姆達的情況下,我只有一個,雖然刪除一個。
注意:如果我只是刪除從集合馬上(而不是從臨時列表)元素這不會發生 - 但後來我就不能來遍歷它沒有例外。
'dup.Book.Id'?這不應該是Book1或Book2嗎? – Vlad274
@ Vlad274 - 很好,我編輯了這個問題。 –