我遇到過多個獲取重復項并從陣列中洗掉它們的示例。我如何做相反的事情,只獲取重復項并洗掉其余元素。從我從這些示例中學到的知識:
我究竟做錯了什么?任何解釋都會很棒!
uj5u.com熱心網友回復:
numbers.Distinct()回傳陣列中的每個數字,只回傳一次。如果從陣列中排除這些數字,則排除所有內容。相反,您希望獲得至少出現兩次的數字。
您可以采用惰性(瘋狂的記憶體分配)路線 ( numbers.GroupBy(w => w).Where(w => w.Count() >= 2).Select(w => w.Key).ToArray()) 或高性能方式:
List<int> numbers = ...; // input numbers
var seen = new HashSet<int>();
var numbersWithDuplicates = new List<int>();
foreach(var number in numbers)
if(!seen.Add(number)) // only care about numbers that appear multiple times
numbersWithDuplicates.Add(number);
var uniques = numbers.Except(numbersWithDuplicates).ToList();
uj5u.com熱心網友回復:
另一種使用 a 的方法Dictionary<int, int>,它跟蹤每個值出現的次數:
Dictionary<int, int> counts = new Dictionary<int, int>();
foreach(int num in numbers)
{
if (!counts.ContainsKey(num))
{
counts.Add(num, 0);
}
counts[num] ;
}
duplicates = counts.Where(c => c.Value >= 2).Select(c => c.Key).ToArray();
這將為您提供在陣列“duplicates”中重復的不同值。
如果您需要知道每個值出現的次數,您也可以在之后直接使用字典“計數”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315952.html
