簡體   English   中英

如何使用Linq在列表中找到屬性值不同的第一項?

[英]How can I find the first items in a list with a different value for a property using Linq?

我有一個對象的有序列表,我想找到屬性更改的每個項目的索引,並獲取將索引與屬性匹配的字典/成對列表。 例如,在按字母順序排列的單詞列表中查找每個新的第一個字母的索引。

我可以使用foreach循環來做到這一點:

Initials = new Dictionary<char, int>();
int i = 0;
foreach (var word in alphabeticallyOrderedList))
{
    if (!Initials.ContainsKey(word.First()))
    {
        Initials[word.First()] = i;
    }
    i++;
}

但是我覺得應該使用Linq來做到這一點。

通過使用暴露索引的Select重載和GroupBy + ToDictionary ,可以使LINQ具有相同的功能:

 Initials = alphabeticallyOrderedList
    .Select((word, index) => new { Word = word, WordIndex = index })
    .GroupBy(x => x.Word[0])
    .ToDictionary(charGroup => charGroup.Key, charGroup => charGroup.First().WordIndex);

但引用我自己:

LINQ並非總是更具可讀性,尤其是在索引很重要的情況下。 如果使用大型LINQ查詢,您還將失去一些調試,異常處理和日志記錄功能

暫無
暫無

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

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