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