問題
我試圖用內置的方法array.Distinct.First()從一個C#陣列中回傳一個唯一的元素。該方法對某些陣列有效,但對這個陣列來說,回傳的元素是不正確的{11,11,11,14,11,11}。它給我的輸出是11,這是不正確的,因為該陣列中的唯一元素應該是14。
我知道有一種方法可以用predicate函式來做到這一點,但這只是我問的原因,我不知道
代碼
public static int getUnique(IEnumerable< int> numbers){
return numbers.Distinct().First()。
//you can bet i tried .FirstOrDefault()。
//沒有任何成功。
}
如果有任何幫助,使該代碼回傳正確的值,我們將非常感激。
uj5u.com熱心網友回復:
這不是Distinct的作用。
它將從一個序列中回傳不同的元素,從而洗掉重復的元素。
你只想要開始時沒有重復的專案;
你只想要開始時沒有重復的專案。
var numbers = new int[] { 11, 11, 11, 14, 11 };
foreach (var i in numbers.GroupBy(i => i).Where(g => g.Count() == 1).Select(g => g.Key)
Console.WriteLine(i);
你顯然想得到第一個不重復的值,所以你會得到這樣的結果;
你想得到第一個不重復的值。
var numbers = new int[] { 11, 11, 11, 14, 11 };
int? firstNonDuplicate = numbers.GroupBy(i => i).Where(g => g.Count() == 1).Select(g => g.Key).FirstOrDefault() 。
Console.WriteLine(firstNonDuplicate)。
在這里要注意你的空檢查,這只是證明了一個觀點。
uj5u.com熱心網友回復:
使用distinct它將回傳所有不同的元素。用下面的方法獲得一個唯一的值
int[] numbers = {11, 11, 11, 14, 11 };
Console.WriteLine(numbers.GroupBy(i => i).Where(g => g.Count() == 1).Select(g => g.Key).First() )。
uj5u.com熱心網友回復:
一般來說,你應該通過一個鍵來分組你的集合,然后通過包含元素的數量來過濾:
var groupings= numbers.GroupBy(x => x)
.Where(x => x.Count() == 1)
.Select(x => x.Key)。
現在這給了你所有唯一的數字。你的問題有點模糊,因為你想要的是 "一個 "唯一的數字--而不是 "那個 "唯一的數字,所以有解釋的余地,如果有多個數字,應該發生什么。
選項1:只取第一個結果:
var uniques = numbers.GroupBy(x => x)
.Where(x => x.Count() == 1)
.Select(x => x.Key)
.First()。
選項1.1 對結果進行排序,取最小的(或最大的)
var uniques = numbers.GroupBy(x => x)
.Where(x => x.Count() == 1)
.Select(x => x.Key)
.OrderBy(x => x)
.First()。
選項2:確保只有一個唯一的數字,否則扔掉:
var uniques = numbers.GroupBy(x => x)
.Where(x => x.Count() == 1)
.Select(x => x.Key)
.Single()。
注意:如果沒有唯一的數字,Single()和First()將拋出,而SingleOrDefault()和FirstOrDefault()將回傳int的默認值,即0,這可能導致錯誤結果。你可以考慮將其改為int?,以允許回傳null,如果沒有唯一的數字。
uj5u.com熱心網友回復:
你可以試試下面的代碼。
var numbers = new int[] { 11, 11, 11, 14, 11, 11 };
var uniqueList = numbers.GroupBy(n => n).Where(item => item.Count() == 1).Select(item => item.Key) 。
foreach (var item in uniqueList)
Console.WriteLine(item)。
uj5u.com熱心網友回復:
我為你做了一個特別的方法。我有些原始地處理了這個問題。感謝這個方法,你可以很容易地找到獨特的變數。
public static int[] getUniqiue(int[] vs)
{
List<int> vs1 = new List<int>(vs)。
List<int> vs2 = new List<int>(vs)。
List<int> ee = new List<int>()。
List<int> vs3 = new List<int>()。
int i = 0;
foreach (var item in vs1)
{
vs2.Remove(item)。
if(vs3.Contains(item) || vs2.Contains(item))
{
vs3.Add(item)。
}
else { vs3.Add(item).
{
ee.Add(item)。
}
i ;
}
return ee.ToArray();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327593.html
標籤:
