【问题标题】:Can I iterate over two arrays at once in Java?我可以在 Java 中一次迭代两个数组吗?
【发布时间】:2014-11-17 05:37:02
【问题描述】:

对于一个数组,我可以这样迭代:

for(String str:myStringArray){

}

如何一次遍历两个数组? 因为我确信这两个的长度是相等的。我想要它如下:

for(String attr,attrValue:attrs,attrsValue) {

}

但这是错误的。

在这种情况下,也许地图是一个不错的选择,但是 3 个等长数组呢?我只是讨厌创建以以下格式使用的索引'int i':

for(int i=0;i<length;i++){
}

【问题讨论】:

  • 语法不优雅。您将需要两个迭代器或两个计数器和一个循环。
  • 使用带有计数器的常规 for 循环,而不是增强的 for 循环。确定你想要总共多少次迭代,然后调用你想要的每个数组中的索引。
  • 基于名称“attr”和“attrValue”,这在概念上是一个地图吗?因为一种方法可以为地图做到这一点。

标签: java arrays


【解决方案1】:

你不能用 foreach 语法做你想做的事,但你可以使用显式索引来达到同样的效果。仅当数组长度相同时才有意义(或者您使用其他规则,例如仅迭代到较短数组的末尾):

这是检查数组长度是否相同的变体:

assert(attrs.length == attrsValue.length);
for (int i=0; i<attrs.length; i++) {
   String attr = attrs[i];
   String attrValue = attrsValue[i];
   ...
}

【讨论】:

  • 是的,我更新了我的问题,我只是讨厌创建那个'int i'。
  • 我没有从你的更新中得到任何具体的信息,除了你“讨厌创建那个 i”。不幸的是,如果您有单独的数组,那是最干净的方法。请记住,干净的foreach 构造无论如何都会在幕后创建基于索引的代码。数组在逻辑上绑定在一起,也许您需要的是某个类的单个数组,该数组组合了两个数组中的元素,在您的示例中为 attrattrValue
【解决方案2】:

你可以用老式的方式来做。

假设您的数组具有相同的大小:

for(int i = 0; i < array1.length; i++) {
   int el1 = array1[i];
   int el2 = array2[i];
}

在 Scala 中,有一个用于集合的嵌入式 zip 函数,因此您可以执行类似的操作

array1 zip array2

但它尚未移植到 Java8 集合。

【讨论】:

    【解决方案3】:

    Foreach 循环有很多优点,但也有一些限制。

    1:一次只能迭代一个类(实现了Iterable i/f)。

    2:您没有索引控制。 (为此使用显式计数器。)

    对于您的问题,请使用旧版for loop

    【讨论】:

    猜你喜欢
    • 2011-02-17
    • 2021-05-23
    • 2012-08-10
    • 2015-07-30
    • 2022-01-19
    • 2013-04-16
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多