Я думаю, что причина, по которой axios
раскрывает как onUploadProgress
, так и onDownloadProgress
, заключается в том, что вы можете легко выполнить некоторые вычисления переданных байтов. В случае простого запроса к серверу я думаю, что использование флага, такого как установка на
state = {
loading: false
}
, и переключение на true
всякий раз, когда вы делаете свой запрос, является идеальным. Вы можете использовать блесну в качестве маски, если хотите.
Можно выполнить итерации или с для циклов или с улучшенный для циклов:
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
}
для доступа к координатам на основе значения, Вам был бы нужен своего рода двойной hashmap (посмотрите на java.util. HashMap), но я не знаю ни о чем, что делает так непосредственно
Если Ваша сетка не будет отсортирована в некотором роде затем, Вы, вероятно, не сделаете немного лучше, чем поиск грубой силы.
Для итерации я думаю, что это было бы что-то вроде этого (синтаксис мог бы быть прочь немного, я не имел дело с массивами в 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
}
}
Для поиска необходимо было бы, вероятно, использовать это, чтобы выполнить итерации, затем возвратиться, после того как Вы нашли его.
Если Вы могли бы искать положение того же значения многократно затем, Вы могли бы хотеть к memoize результаты с помощью хеш-таблицы.
Для итерации по всем элементам в сетке пробуют это:
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
}
}
Используйте вложенный, чтобы циклы выполнили итерации по размерам X и Y, который позволяет Вам пробежаться через каждое значение по одному.
Для ввода значения просто сделайте то же как выше, но ищите соответствие к своему требуемому значению.
Вы будете самыми счастливыми, если Вы заблокируете все эти наборы в едином классе и не выставите их всегда.
Это означает перемещать Ваши стандартные программы поиска и поиска в этот класс также.
Для устройства хранения данных, общей покрытой итерации, добавляют хеш-таблица и поиск. Я поместил этот комментарий к сообщению nickolai:
Сохраните новое Целое число (ix + iy * 1000) как значение в Вашей хеш-таблице. Если Ваш индекс y может перейти 1000, используют большее количество - ints, являются действительно большими. Для получения это назад использует ix=val%1000, iy=val/1000.
Если Ваш массив и хеш-таблица будут инкапсулироваться в том же классе, то остальную часть Вашего кода будет довольно легко записать и намного более чистый.
Обычно нет никакого способа найти определенные координаты конкретного значения кроме путем прохождения через массива и поиска его. Однако, если значения в массиве, как гарантируют, будут уникальны (т.е. каждое значение только происходит в одной ячейке), Вы могли поддержать отдельный массив как индекс, который хранит координаты каждого значения, индексированного значением.