[英]How to get ONLY unique values from list C#
例如,我有一個 excel 單元的列表
List<Cell> cells = new List<Cell>
{
new Cell("4"),
new Cell("Hez"),
new Cell("Method"),
new Cell("4"),
new Cell("Val"),
new Cell("Method"),
}
我需要獲取唯一唯一的單元格(在本例中為 Cell("Val")、Cell("Hez")),因此 Distinct() 不適合我。
我找到了這個解決方案,但它根本不返回任何數據
var uniqueTest = allData.GroupBy(cell => cell)
.Where(group => group.ToString().Count() == 1)
.Select(group => group.Key);
我認為問題是 Cell object 不包含任何比較方法(這是 IronXl lib)所以這就是我在這里使用 ToString() 的原因。
但我還不太了解 linq,所以任何解釋或建議表示贊賞
評論:
我需要返回一個單元格列表,但具有唯一值
第 1 步:按單元格的值對單元格進行分組。
第 2 步:只保留大小為 1 的組。
第 3 步:從每個組中獲取唯一的項目。
var uniqueCells =
allData.GroupBy(cell => cell.Value) //Step 1
.Where(g => g.Count() == 1) //Step 2
.Select(g => g.Single()) //Step 3
這應該很容易。
讓我們計算數字 4 的值是 Key.. 然后你的 linq 應該是這樣的
var uniqueTest = allData.GroupBy(x=> x.Key).Select(x=> x.First()).Select(x=> x.Key);
如果我理解正確,但我不確定我是否理解,您可以使用.First()
或更強大的.Single()
var uniqueTest = allData.First(c => c.ToString() == "Val");
在此示例中,我假設c.ToString()
將為您提供單元格的值。 否則它可能會像c.Value
類的東西。
還有OrDefault
變體。 查看這篇文章了解不同之處; https://www.c-sharpcorner.com/blogs/singleordefault-vs-firstordefault-in-linq-query1
如果你 class Cell 是這樣的。
public class Cell
{
public Cell(string mystring)
{
MyString = mystring;
}
public string MyString { get; set; }
那么這將獲得一個唯一的列表:
List<Cell> UniqueCells = new List<Cell>();
foreach (var cell in cells)
{
if(!UniqueCells.Any(c=>c.MyString == cell.MyString))
{
UniqueCells.Add(cell);
}
}
在這種情況下,只會添加第一個包含“方法”和“4”的單元格。 這 '。' 和'.any'是必不可少的部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.