在下面的代碼中,我希望結果有 2 個具有相同值的元素(“Item1”,“Item1”)但是result有 1 個元素(“Item1”):
var list = new List<string>(){"Item1","Item1"};
var emptyList = new List<string>();
// I expect the result of follwing line be {"Item1","Item1"} but is {"Item1"}
var result = list.Except(emptyList);
似乎Except()方法回傳結果集的唯一值,如何獲得所需的值?
uj5u.com熱心網友回復:
定義本身已經設定。
產生兩個序列的集合差異。
如果你仔細閱讀檔案。
兩個集合之間的集合差異定義為第一個集合中沒有出現在第二個集合中的成員。
此方法回傳第一個沒有出現在第二個中的那些元素。它不會在第二個中回傳那些沒有出現在第一個中的元素。僅回傳唯一元素。
解決方法是使用list.Where(x => !emptyList.Contains(x))
另外,為了更清楚,請參閱此問題。
uj5u.com熱心網友回復:
您可以使用以下內容:
var result = list.Where(s => !emptyList.Contains(s));
性能會更差,但這是否重要取決于您的資料集。
uj5u.com熱心網友回復:
只需模擬ExceptIterator,替換Add為Contains
private static IEnumerable<TSource> ExceptOrdinaryIterator<TSource>(
IEnumerable<TSource> first, IEnumerable<TSource> second)
{
var set = new HashSet<TSource>(second);
foreach (TSource element in first)
if (!set.Contains(element))
yield return element;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/537435.html
標籤:C#仿制药除了
