我有一个类型的函数: 我可以按如下方式迭代数组。 (标准示例) 可以循环数组并将元素返回到变量 x,如下所示。
public Map<String, String> (Object ... args)
{
. . .
for( Object x : args); // do stuff
. . .
dummyUsexAndPrint(x); // just demonstrating that we can now use x
// x will vary on each loop iteration.
}
我的目标是在不进行任何算术的情况下从数组中生成键值对。 我们可以“二乘二”地迭代循环吗? 像这样的东西---->
public Map<String, String> (Object ... args)
{
. . .
for( Object X : args, Object Y : args) {
globalMap.put(X,Y); // using X and Y now, instead of just "x"
//in the previous case
}
. . .
}
第一个案例与模式 (a_1, a_2 ...) 匹配。
同时,我需要匹配模式 (a_1, a_2, a_3 ...)
并在每次循环运行时提取 a_1 和 a_2。
这种模式匹配在 Java 中可行吗? 我还没有遇到过这样的例子,只是想验证一下。
编辑:
假设我们有一个数组 [1,2,3,4,5,6]。
一个简单的循环,例如
for (int x : array) { ...}
会给我 x 作为 1 2 3 4 5 6
我想要的是一次获取 2 个值。
for (int x,y : array) { ... }
1 2
3 4
5 6
其中左侧值为 x,右侧值为 y。
编辑2:
for (int i = 0 ; i == array.length - 1; i += 2)
{
x = array[i];
y = array[i + 1];
print(x, y);
}
这清楚了吗?
编辑:似乎没有办法逃避算术。我希望我的数组迭代可以在不进行算术的情况下完成,这会引发异常(这样我就不必检查偶数/奇数)。
契约(Contract)规定循环一次选择 2 个成员并循环。如果没有留下任何成员,则履行契约;如果留下一个成员,则违反一次分解两个值的契约并抛出异常。
没有这样的运气,在某些语言中可以直接匹配模式,而不是编写原始循环。我是 Java 新手,所以正在探索。
最佳答案
这两个答案都假设集合的长度是偶数(因为,显然,如果不是,那么每个 x< 都不会总是有一个
)。y
/
对于T[] args
:
for (int i = 0; i < args.length; i+=2) {
T x = args[i];
T y = args[i+1];
// ... use x and y, e.g. System.out.println(x + " " + y);
}
对于T
的一般集合:
boolean even = true;
T x = null;
for (T obj : args) {
if (even) {
x = obj;
} else {
T y = obj;
// use x and y, e.g. System.out.println(x + " " + y);
}
even ^= true; // flip even
}
关于Java数组循环迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37713258/