2015-05-18 5 views
1

Во-первых, мой код работает нормально. Ничего не нужно делать, но когда я скопировал некоторые части кода из другого места, я не совсем понимаю, что происходит здесь, и надеюсь на объяснение, чтобы узнать что-то.Что происходит в этой карте/массиве строк?

Я использую структуру воспроизведения и отправляю свой класс контроллера AJAX POST с идентификатором и счетом. Я помещаю эти параметры в строки и сохраняю их в своей БД.

Map<String, String[]> parameters = request().body().asFormUrlEncoded(); 
     String questionIDInput = parameters.get("questionID")[0]; 
     String voteScoreInput = parameters.get("score")[0]; 

Часть, которую я не получаю, это: .get("questionID")[0];/.get("score")[0];. Почему есть два нуля? Является ли карта какой-то длинной строкой, и я использую "questionID/score" в качестве ключа для поиска значений? 0 действительно меня смущает, просветите меня, пожалуйста.

ответ

8

parameters.get("questionID") возвращает значение для ключа «questionID». Значение представляет собой массив String (String[]), поэтому parameters.get("questionID")[0] дает вам первый String этого массива.

Обратите внимание, что этот код предполагает, что на карте присутствует ключ "questionID" и что значение для этого ключа является непустым массивом. Если какое-либо из этих предположений окажется ложным, вы получите NullPointerException или ArrayIndexOutOfBoundsException.

+0

Ах, так что это отдельные строковые массивы ... и у обоих есть другая строка в их первом положении, а значит и 0. Узнали что-то! – hamena314

2

Map имеет значение по ключ и в, который соответствует ключу.

На вашей карте ключ имеет тип String, тогда как значение имеет тип String[] (массив объекта String).

Когда вы сделаете parameters.get("questionID"), это позволит получить массив String[], который соответствует ключу со значением, равным "questionId".

Для получения первого элемента возвращаемого массива используется [0].

+0

Спасибо, помог мне понять. Какой-то мета-вопрос: вы редактировали мой пост и помещали «словарь» туда. Я использовал тег «map», который превратился в «словарь». Итак, почему тег «map» превращается в «словарь» и почему «словарь» применимый тег для моего вопроса? (здесь не родной английский) – hamena314

+0

Возможно, система автоматически изменяет «карту» на «словарь». Не знаю, почему. –

+0

Заданный вопрос на meta.stackoverflow ... позволяет узнать, что объясняет http://meta.stackoverflow.com/questions/294564/why-does-the-tag-map-turn-into-dictionary-on-stackoverflow – hamena314

Смежные вопросы