[英]Remove array elements that appear more than once
Array.Distinct()
不同的元素。 如何從Array中刪除所有重復元素, 包括原始元素?
例如,給定此輸入數組:
{ Dog, Cat, Mouse, Dog, Dog, Parrot, Mouse, Hound }
我想得到以下輸出:
{ Cat, Parrot, Hound }
您可以使用一些Linq:
var singles = myArray
.GroupBy(x => x)
.Where(g => g.Count() == 1)
.SelectMany(g => g);
或像這樣:
var singles = myArray
.GroupBy(x => x)
.Where(g => !g.Skip(1).Any())
.SelectMany(g => g);
GroupBy
方法將所有相似的元素收集在一起。 Where
方法將篩選出不滿足特定條件的組。 我提供了兩個替代條件,但是它們都做同樣的事情-僅當組中僅包含一個元素時它們才返回true
:
g.Count() == 1
計算每個組中的元素數量,如果結果等於1,則返回true
。 !g.Skip(1).Any()
返回true
。 實際上,這實際上比g.Count() == 1
效率更高,因為它不需要枚舉組中的所有元素,但是這對某些讀者來說有點令人困惑,因此在將其引入生產代碼之前請三思。 SelectMany
將返回結果集合中的所有元素。 由於每個組中只有一個元素,因此只剩下那些沒有重復的元素。 您可以嘗試這樣的事情:
Array.GroupBy(x => x).Where(x => x.Count() == 1).SelectMany(x => x);
myList.Where(i => myList.Count(j => j == i) < 2);
請注意,這取決於==
運算符是否足以進行比較(盡管您可以將其替換為所需的任何比較)。 它也不是很有效,盡管我懷疑其他任何答案都不會。
這通過將結果限制為在源列表中出現不超過一次的元素而起作用。
使用Group by子句可以得到結果。
var list = new List<string> { "Dog", "Cat", "Mouse", "Dog", "Dog", "Parrot", "Mouse", "Hound" };
//var list = new List<string> { "a", "b", "a", "c", "a", "b" };
var q = (from x in list
group x by x into g
let count = g.Count()
where count == 1
orderby count descending
select g.Key);
foreach (var x in q)
{
Console.WriteLine(x);
}
int []s={1,2,2,3,5,4,4};
int[] q = s.Distinct().ToArray();
它將返回{1,2,3,5,4}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.