从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?
c#/。与Java的iterator.remove.
相比,Net迭代器(由IEnumerable<T>
返回的IEnumerator<T>
)是只读的前向迭代器,不允许从底层集合中删除项。大多数集合都支持通过索引(如List<T>.RemoveAt
)删除项,这几乎是等价的。
或者,如果您只想在迭代期间跳过项目- Enumarable.Skip
或Enumerable.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;
}
我认为这将是一个字面翻译,但有更简单的方法来做到这一点,这取决于数组的类型,我确定