考慮使用Select
的過載,該過載將索引作爲轉換的一部分(記錄爲here)。
如果您想要每個不同元素的最後一個不同元素,則可以嘗試相應地使用GroupBy
對每個IGrouping
進行排序,並抓取每個組的正確元素。
repeat = domain + dir.Split('/')
.Select((word, index) => Tuple.Create(word, index))
.Where(x => keep.Contains(x.Item1))
.GroupBy(x => x.Item1)
.Select(g => g.OrderByDescending(x => x.Item2).First())
.OrderBy(x => x.Item2)
.Select(x => x.Item1)
.Aggregate((gi, j) => gi + "/" + j) + repeat.Substring(lastSlash);
在這裏,我們將每個單詞與其索引(使用上面提到的Select
過載)耦合。然後我們篩選出感興趣的話。我們現在使用GroupBy
來生成IEnumerable<IGrouping<string, Tuple<string, int>>
,而不是使用Distinct
。由於IGrouping
本身實現IEnumerable
,我們通過在按索引排序時獲取每個IGrouping
的最後一個元素,將我們的IGroupings
列表投影到Tuple<string, int>
列表中。然後我們通過索引來命令我們新的Tuples
列表,以便這些單詞保持順序,並且投影到元組的string
部分。
'的string.join( 「/」,repeat.GroupBy(X => x).OrderBy(x => x.Count())。Select(x => x.Key))'也許? – Polity