簡體   English   中英

如何從列表 C# 中僅獲取唯一值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM