我有兩個相同類型的列表。該類型沒有標識符或任何其他有保證的編程方式。C# - 如何獲得沒有標識符的兩個列表的補充
- 列表A:{1,2,2,3,5,8,8,8}
- 列表B:{1,3,5,8}
我想要的從項目A不在B.
- 所需的結果:{2,2,8,8}
如果類型有標識,我可以用如下語句的弗洛翼...
var result = listA
.Where(a => listB.Where(b => b.Id == a.Id).Count() == 0)
.ToList();
到目前爲止,我可以做到這一點的唯一方法是使用一個循環,我添加的每個項目,它不會出現在原始列表的次數。
foreach (var val in listB.Select(b => b.val).Distinct())
{
var countA = listA.Where(a => a.val == val).Count();
var countB = listB.Where(b => b.val == val).Count();
var item = listA.Where(a => a.val == val).FirstOrDefault();
for (int i=0; i<countA-countB; i++)
result.Add(item);
}
有一個更清潔的方式來實現這一目標?
編輯: 這是列表中對象的簡化版本。它來自一個打到另一個系統的Web服務。
public class myObject
{
public DateTime SomeDate { get; set; }
public decimal SomeNumber; { get; set; }
public bool IsSomething { get; set; }
public string SomeString { get; set; }
}
數據我收到具有用於SomeDate/SomeString和SomeNumber和IsSomething相同的值重複的值。兩個對象可能具有相同的屬性,但我需要將它們視爲不同的對象。
我們可以用LISP代替C#嗎? – Shaded 2011-02-25 20:54:18
你說你沒辦法比較項目,然後在你的第二個例子中用'val'比較它們。請解釋。 – 2011-02-25 21:00:08
@Shaded:把它扔出去,如果C#沒有解決方案,那麼至少你有什麼東西。 :) – Mayo 2011-02-25 21:00:17