跳过增强for循环的一个元素
Skip one element of enhanced for loop
在处理图表时,我经常发现我需要在循环时跳过一个元素。有没有办法在循环的每个循环中调用 if 语句来做到这一点?
示例:
private void printAll(Node<T> root){
System.err.println(toString());
for(Node<T> node : links.values()){
if (node == root) continue;
node.printAll(this);
}
}
我怀疑答案是否定的,但想确认一下。
编辑:问题是,有没有一种方法可以在不使用带有增强 for 循环的 if 语句或其他方法的情况下跳过一个已知元素来迭代数据结构。
Its simple structure allows one to simplify code by presenting for-loops that visit each element of an array/collection without explicitly expressing how one goes from element to element.
那里的关键词是each
。这意味着 each and every
,而不是 all but one
。如果你想要 all but one
(或者像 all but those meeting some criteria
这样的其他变体,你需要用条件来编码。
或者,$DEITY 禁止,构造一个 new 集合,仅包含您要处理的内容,然后 foreach
那个。这可能是一个更糟糕的想法,因为它仍然必须使用条件来构建新集合,所以你真的一无所获。
也许 nice 语法如下:
for (Node<T> node :in links.values() :where node != root)
node.printAll(this);
(我相信 LINQ 为 Microsoft stable 提供了这个)但这只是你已经拥有的语法糖。 代码 可能更短,但您仍然会在幕后做同样的工作。
在处理图表时,我经常发现我需要在循环时跳过一个元素。有没有办法在循环的每个循环中调用 if 语句来做到这一点?
示例:
private void printAll(Node<T> root){
System.err.println(toString());
for(Node<T> node : links.values()){
if (node == root) continue;
node.printAll(this);
}
}
我怀疑答案是否定的,但想确认一下。
编辑:问题是,有没有一种方法可以在不使用带有增强 for 循环的 if 语句或其他方法的情况下跳过一个已知元素来迭代数据结构。
Its simple structure allows one to simplify code by presenting for-loops that visit each element of an array/collection without explicitly expressing how one goes from element to element.
那里的关键词是each
。这意味着 each and every
,而不是 all but one
。如果你想要 all but one
(或者像 all but those meeting some criteria
这样的其他变体,你需要用条件来编码。
或者,$DEITY 禁止,构造一个 new 集合,仅包含您要处理的内容,然后 foreach
那个。这可能是一个更糟糕的想法,因为它仍然必须使用条件来构建新集合,所以你真的一无所获。
也许 nice 语法如下:
for (Node<T> node :in links.values() :where node != root)
node.printAll(this);
(我相信 LINQ 为 Microsoft stable 提供了这个)但这只是你已经拥有的语法糖。 代码 可能更短,但您仍然会在幕后做同样的工作。