基于等效于从 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.Skip
或 Enumerable.Where
可以是一个选项:
mySequence.Where((item,id) => id != indexToSkip)
我正在尝试编写来自 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.Skip
或 Enumerable.Where
可以是一个选项:
mySequence.Where((item,id) => id != indexToSkip)