如果没有for loop
,有没有办法查看multidimensional array
中是否存在值?我找到了
Arrays.asList(*ArrayName*).contains(*itemToFind*)
但这只会搜索数组的第一个维度,我需要搜索2个维度。
答案 0 :(得分:2)
我创建了一个5x5整数数组,并以值i * j初始化。
Exists
方法需要行号和值来搜索。
private static Integer[][] myarray = new Integer[5][5];
public static boolean exists(int row, int value) {
if(row >= myarray.length) return false;
List<Integer> rowvalues = Arrays.asList(Arrays.asList(myarray).get(row));
if(rowvalues.contains(value)) return true;
return exists(row+1, value);
}
答案 1 :(得分:0)
是
您可以使用Bloom过滤器(http://en.wikipedia.org/wiki/Bloom_filter)或为数组的键创建基于树的索引,例如Trie(http://en.wikipedia.org/wiki/Trie)
基本上,您需要一个数据结构来查找值,而不是键。它不会花费太多空间或速度,因为您可以在两个数据结构(您和您选择的数据结构)上重复使用值对象的引用
答案 2 :(得分:0)
如果你想通过它的逻辑来解决问题,那么你几乎可以用递归做任何事情。在这种情况下,它不应该太难
private boolean checkForValue(int val, int row, int col){
if(row == numRows && col == numCols)
return false;
else{
if(values[row][col] == val)
return true
else if(col < (numCols - 1))
checkForValue(val, row, col + 1);
else
checkForValue(val, row + 1, 1);
}
}
但是,如果你只是想节省时间,我认为for循环真的非常有效率
private boolean checkForValue(int val){
for(int i = 0; i < numRows; i++){
for(int j = 0; j < numCols; j++){
if(values[i][j] == val) return true;
}
}
}
return false;
两者都不太粗糙。