我有一个有序的实体列表。每个实体都有一个int UniqueKey
属性。
我希望列表经过转换,从而使UniqueKey
值变得唯一(假设有重复项)。这是通过查找重复项并逐步增加它们来完成的。
分步过程:
- 从索引 1 开始(我使用从零开始的索引)
- 如果任何先前的元素具有相同
UniqueId
的值,则在当前索引处增加值。 - 重复 (2) 直到没有之前的元素具有相同的 UniqueId
- 向右移动一个元素
例如,{ 1, 1, 1, 3, 3, 8 }
将执行以下步骤:
{ 1, 2, 1, 3, 3, 8 }
: 索引 1 递增{ 1, 2, 2, 3, 3, 8 }
: 索引 2 递增{ 1, 2, 3, 3, 3, 8 }
: 索引 2 再次递增{ 1, 2, 3, 4, 3, 8 }
: 索引 3 递增{ 1, 2, 3, 4, 4, 8 }
: 索引 4 递增{ 1, 2, 3, 4, 5, 8 }
: 索引 4 再次递增
下面的代码以非常程序化的方式执行上述算法:
entities = entities.OrderBy(x => x.UniqueId);
foreach (var entity in entities)
{
var leftList = entities.Take(entities.IndexOf(entity));
while (leftList.Any(x => x.UniqueId == entity.UniqueId))
{
entity.UniqueId++;
}
}
问题:是否可以在 LINQ 中实现这一点?