yourList.GroupBy(x => x)
.SelectMany(g => g.Select((x,idx) => g.Count() == 1 ? x : x + idx))
.ToList();
**编辑:**如果元素顺序很重要,下面是另一个解决方案:
var counts = yourList.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count());
var values = counts.ToDictionary(x => x.Key, x => 0);
var list = yourList.Select(x => counts[x] > 1 ? x + ++values[x] : x).ToList();
3条答案
按热度按时间vnzz0bqm1#
您正在查找类似以下内容的内容:
**编辑:**如果元素顺序很重要,下面是另一个解决方案:
7gs2gvoe2#
您可以:
您将获得:
如果你不想保持秩序,那么你可以做:
5t7ly7z53#
这使用了一些lambda表达式和linq来完成,保持了顺序,但是我建议使用一个带有
foreach
循环和yield return
的函数会更好。