我有一个字符串,如下所示:
string Text = "012345678901234567890123456789";
同时有一个带有索引的List<int>
List<int> Indexes = new List<int>() { 2, 4, 7, 9, 15, 18, 23, 10, 1, 2, 15, 40 };
以下为限制条件:
- 列表中存在重复项
- 列表未排序
- 索引可能大于
Text.length
如何最佳地从文本中删除索引列表中的字符?
035681234679012456789
有比这更有效的方法吗?
foreach (int index in Indexes
.OrderByDescending(x => x)
.Distinct()
.Where(x => x < Text.Length))
{
Text = Text.Remove(index, 1);
}
更新:以下是当前答案的基准测试结果(string
长度为100,000个字符,List<int>
长度为10,000):
Gallant: 3.322 ticks
Tim Schmelter: 8.602.576 ticks
Sergei Zinovyev: 9.002 ticks
rbaghbanli: 7.137 ticks
Jirí Tesil Tesarík: 72.580 ticks
HashSet<int>
吗?这样就不会有重复项,而且使用Contains
进行查找的效率更高,时间复杂度为 O(1)。 - Tim Schmelter