我有一个数组,类型为'int[][]
',表示一个小网格的坐标。每个坐标都被分配了自己的值,例如array[0][4] = 28
......
我有两个问题。首先,如何迭代遍历存储的所有值。其次,我想输入一个值并返回它在网格中对应的特定坐标。最好的方法是什么?
谢谢任何帮助!
你可以使用普通的for循环或增强型for循环进行迭代:
for (int row=0; row < grid.length; row++)
{
for (int col=0; col < grid[row].length; col++)
{
int value = grid[row][col];
// Do stuff
}
}
或者// Note the different use of "row" as a variable name! This
// is the *whole* row, not the row *number*.
for (int[] row : grid)
{
for (int value : row)
{
// Do stuff
}
}
第一个版本是“寻找坐标”问题的最简单解决方案 - 只需检查内部循环中的值是否正确。
使用循环来迭代值:
int[][] matrix
//...
for(int row[] : matrix)
for(int cell : row){
//do something with cell
}
要根据值访问坐标,您需要某种双哈希映射(查看java.util.HashMap),但是我不知道有什么方法可以直接实现这样的映射。
int grid[][] = new int[10][10];
for(int i = 0; i < grid.length(); ++i) {
for(int j = 0; j < grid[i].length(); ++j) {
// Do whatever with grid[i][j] here
}
}
除非你的网格以某种方式排序,否则你可能不会比蛮力搜索更好。
对于迭代,我认为应该是这样的(语法可能有点问题,我已经有一段时间没有处理Java中的数组了):
int[][] grid; // just assuming this is already assigned somewhere
for(int x = 0 ; x < grid.length ; x++) {
int[] row = grid[x];
for(int y = 0 ; y < row.length ; y++) {
int value = row[y];
// Here you have the value for grid[x][y] and can do what you need to with it
}
}
如果你需要搜索,可能需要使用迭代来查找,然后在找到后返回。
如果您可能多次查找相同值的位置,则可以使用哈希表记忆结果。
如果您将所有这些集合都封装在一个类中,并且不以任何方式公开它们,那么您会感到最幸福。
这意味着将您的搜索和查找例程也移动到此类中。
对于存储,每个人都可以使用迭代、哈希表和查找。我在Nickolai的帖子上放了这个评论:
将新的Integer(ix + iy * 1000)作为哈希表中的值进行存储。如果您的y索引可以超过1000,请使用更大的数字--int非常大。要获取它,请使用ix=val%1000,iy=val/1000。
如果您的数组和哈希表封装在同一个类中,则其余代码将变得非常容易编写且更加简洁。