簡體   English   中英

使列表在不同列表的c#中不同

[英]Making a list distinct in c# of a distinct list

我正在制作一份有效的清單。 但問題是我已將所有刺痛變為小例值。 但是因為我試圖計算原始列表中不同值的出現次數,為了做到這一點,我使用嵌套for循環並計算值,我面臨的問題是在某些蜇中有一個空格在末尾。 因此,當比較兩個字符串時,它們將不匹配,因為當時的空格會導致不同的List具有相同的兩個值。 有沒有辦法解決

var distinctList = list.Distinct();

在做Distinct()之前你需要先Trim() Distinct()

var list = new[] {" string", "string "};
var distinctList = list.Select(s => s.Trim()).Distinct();

如果您還需要忽略區分大小寫:

var list = new[] {" String", "string "};
var distinctList = list.Select(s => s.Trim())
                       .Distinct(StringComparer.InvariantCultureIgnoreCase);

如果您的列表包含null ,可能是您忽略它,則可以先輕松過濾:

var list = new[] {" String", "string ", null};

var distinctList = list.Where(s => !string.IsNullOrEmpty(s))
                       .Select(s => s.Trim())
                       .Distinct(StringComparer.InvariantCultureIgnoreCase);

如果您需要在結果上保持null ,請創建一個擴展方法來自定義Trim()

    public static string CusTrim(this string @this)
    {
        return @this == null ? null : @this.Trim();
    }

然后你可以打電話:

var distinctList = list.Select(s => s.CusTrim())
                       .Distinct(StringComparer.InvariantCultureIgnoreCase);

還有更好的方法。 首先,正如Cuong正確顯示的那樣,您應該修剪您的值以刪除前導或尾隨空格。

其次,如果您想要每個不同值的出現次數,您可以對它們進行分組並在同一Linq語句中對它們進行計數。 它可能看起來像這樣(編輯:你提到你有一些你想要保留的空值,當你在列表元素上調用方法時必須考慮到這些值):

var groupedCounts = list.Select(s=>s == null ? s : s.ToLowerInvariant().Trim())
                    .GroupBy(x=>x)
                    .Select(g=>new {g.Key, g.Count()});

該組創建了一個“查找”,基本上是IEnumerables的只讀,鍵控集合,其中鍵基於分組投影(這里我們只想比較字符串,但您可以想象也可以按第一個字符或其他字符分組)手段)。 然后,最后一個Select創建一個“匿名類型”,其中包含兩個字段:Key和Count(它們是根據它們獲得的值自動命名的)。

請注意,匿名類型的使用僅限於本地范圍; 你不能以強類型的方式返回這個集合,因為根據定義它不是一個“強類型”。 如果此列表需要轉到其他位置,例如設置為實例屬性或從當前方法返回,則可以創建元組而不是匿名類實例,或KeyValuePairs等。

你可以使用linq過濾。

var destinctList = list.Where(x => !String.IsNullOrWhiteSpace(x)).Select(x => x.TrimEnd()).Distinct().ToList();

這也將刪除空字符串

你可以做點什么......

list.Select(i => i.Trim()).Distinct();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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