基于等效于从 java 到 c# 的迭代器,在索引处编写删除方法

Write remove method at index based on iterator equivalent from java to c#

我正在尝试编写来自 java 的等效方法。 MyIterator 扩展了 Iterator。

public T remove(int index) {
    MyIterator<T> it = support.iterator();//returns iterator over my sequence implementation
    int i = 0;
    T e = null;
    while (it.hasNext() && i < index) {
        e = it.next();
        i++;
    }
    it.remove();
    return e;
}

由于没有为 it.remove 定义的方法,我如何将其写入 c#?

public T remove<T>(int index)
{
    IEnumerator it = support.GetEnumerator();
    T e = default(T);
    int i = 0;
    while (it.MoveNext() && i < index)
    {
        e = (T)it.Current;
        i++;
    }

    // Have to remove from the original array here because iterators are read-only
    support.RemoveAt(index);
    return e;
}

我认为这是直译,但根据我确定的数组类型,有更简单的方法可以做到这一点。

C#/.Net 迭代器 (IEnumerator<T> as returned by IEnumerable<T> ) are read-only forward only iterators and do not allow removing items from underlying collection compared to Java's iterator.remove.

大多数集合支持按索引删除项目,例如 List<T>.RemoveAt,这将是相当接近的。

或者,如果您只想在迭代期间跳过项目 - Enumarable.SkipEnumerable.Where 可以是一个选项:

   mySequence.Where((item,id) => id != indexToSkip)