【发布时间】:2015-04-27 12:45:36
【问题描述】:
我发现 (here) 在 c# 中实现了一种迭代器,它模仿 Java 的迭代器方法,但我不太确定如何在我的情况下使用它,或者是否有更简单的选项来重写此方法 c# 的方式. 原java方法:
public RWIterator<T> search (T e){
RWIterator<T> it =null;
RWIterator<T> current = iterator();
RWIterator<T> prev = iterator();
boolean found=false;
while(! found && current.hasNext()){
T el=current.next();
if (el.equals(e)) found = true;
else prev.next();
}
if (found) {
//Iterator<T> tmp = prev;
//System.out.println("searched value is="+tmp.next());
it = prev;
}
return it;
}
RWIterator 扩展 java Iterator 的地方,我无法理解 prev 的使用。我卡在这一点上:
public RWIterator<T> Search(T e)
{
RWIterator<T> it = null;
RWIterator<T> current = Iterator();
RWIterator<T> prev = Iterator();
bool found = false;
while (!found && current.GetEnumerator().MoveNext())
{
T el = current.GetEnumerator().Current;
if (el.Equals(e)) found = true;
else
{
//what should happen with prev.GetEnumerator().Current ?
}
}
if (found)
{
//Iterator<T> tmp = prev;
//System.out.println("searched value is="+tmp.next());
it = prev;
}
return it;
}
【问题讨论】:
-
你真正想要达到什么目的?这看起来也不是特别干净的 Java 代码......如果你能解释大局,它会更容易帮助你。
-
@Jon :这是一种框架,使用包 java.util 中的基本 Java 接口:Iterator
和 Iterable 。类 Storage 实现了 Iterable 接口(此方法来自该接口) 还有一个抽象 IReference 对应于引用的逻辑定义。考虑到迭代器也是引用,因为它们对应于引用 def。因此,RWIterator 类扩展了 java.util 包中的 Iterator 和 IReference 两个接口。项目的重点是使用Decorator一个代理模式来获取专门的集合。 -
我不禁觉得,如果您没有尝试混合使用 Java 和 .NET,您几乎肯定会得到更简洁的解决方案。目前尚不清楚
RWIterator是什么(RW 代表什么?)或search是什么意思.. 虽然您可能可以以这种方式移植代码,但听起来并不就像这是个好主意。 -
(除此之外,当前的方法最终会读取存储空间两次,大概。这听起来不是一个好主意......)
-
另外你应该只调用一次
GetEnumerator()。通常,每次调用GetEnumerator()都会返回一个新的枚举数,该枚举数指向可枚举的开头。
标签: java c# iterator ienumerable