从java到c#编写基于等价迭代器的索引移除方法

本文关键字:迭代器 索引 方法 java | 更新日期: 2023-09-27 17:52:13

我正试图从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;
}

我怎么能把这个写到c#,因为没有定义的方法。remove?

从java到c#编写基于等价迭代器的索引移除方法

c#/。与Java的iterator.remove.

相比,Net迭代器(由IEnumerable<T>返回的IEnumerator<T>)是只读的前向迭代器,不允许从底层集合中删除项。

大多数集合都支持通过索引(如List<T>.RemoveAt)删除项,这几乎是等价的。

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

   mySequence.Where((item,id) => id != indexToSkip)
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;
}

我认为这将是一个字面翻译,但有更简单的方法来做到这一点,这取决于数组的类型,我确定