Я поставил вопрос, чтобы определить, должно ли быть определено какое-либо значение в строке, по крайней мере, n
раза. Чтобы понять это, я решил отсортировать копию каждой строки с помощью qsort из стандартной библиотеки C, а затем легко найти длины каждого запуска значений.
module sortrow
use ISO_C_BINDING
implicit none
interface
subroutine qsort(base, num, size, compar) bind(C,name='qsort')
import
implicit none
integer base(*)
integer(C_SIZE_T), value :: num, size
procedure(icompar) compar
end subroutine qsort
end interface
contains
function icompar(p1, p2) bind(C)
integer(C_INT) icompar
integer p1, p2
select case(p1-p2)
case(:-1)
icompar = -1
case(0)
icompar = 0
case(1:)
icompar = 1
end select
end function icompar
end module sortrow
program main
use sortrow
implicit none
integer, parameter :: M = 3, N = 10
integer i, j
integer array(M,N)
real harvest
integer, allocatable :: row(:)
integer current, maxMatch
call random_seed
do i = 1, M
do j = 1, N
call random_number(harvest)
array(i,j) = harvest*3
end do
end do
do i = 1, M
row = array(i,:)
call qsort(row, int(N,C_SIZE_T), C_SIZEOF(array(1,1)), icompar)
maxMatch = 0
current = 1
do j = 2, N
if(row(j) == row(j-1)) then
current = current+1
else
current = 1
end if
maxMatch = max(maxMatch,current)
end do
write(*,'(*(g0:1x))') array(i,:),'maxMatch =',maxMatch
end do
end program main
Пример прогона:
0 0 0 2 0 2 1 1 1 0 maxMatch = 5
2 1 2 1 0 1 2 1 2 0 maxMatch = 4
0 0 2 2 2 2 2 0 1 1 maxMatch = 5
У вас есть поток входа в систему, и вы сохраняете пользовательский токен в localStorage как ключ usertoken
. Вы также убедились, что ваши запросы обрабатываются правильно, если установлен заголовок авторизации.
Самый простой способ работать с запросами API - это немного больше абстрагироваться от axios, автоматически добавлять токен авторизации и, возможно, предварительно обрабатывать полученный ответ. Например, вы можете захотеть обрабатывать некоторые ошибки глобально, а не в каждом конкретном случае, или хотите преобразовать запрос во что-то, что всегда одинаково.
Сначала вы хотите создать абстракцию, которая вызывает axios.request
. Вы можете передать ему объект конфигурации, как описано здесь здесь . Сейчас для вас важнее всего пара «ключ-значение» headers
, но вы можете расширить ее в будущем.
export default request (config) {
const userToken = window.localStorage.getItem('usertoken');
const requestConfig = { ...config };
if (!requestConfig.headers) {
requestConfig.headers = {};
}
if (userToken) {
requestConfig.headers.authorization = `Bearer ${userToken}`;
}
return axios.request(requestConfig);
}
Теперь мы можем расширить это:
export default post (url, data = {}, config = {}) {
return request({
...config,
method: 'POST'
url,
data
});
}
При проверке запроса в консоли разработчика вы должны увидеть, что, если токен пользователя правильно задан в localStorage, у вас есть дополнительный заголовок в вашем запросе, который отправляется на сервер.