|
С# Средство разработки на платформе .Net |
15.12.2015, 20:33
|
#1
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Dictionary
Проблема возникла.
Есть Dictionary<string,string> 100% не пустая, т.е key-value имеется, но при поиске значения по ключу говорит что такого ключа нет, хотя если на глаз, то значения совпадаю.
Как заполняю словарь:
public Dictionary<string, string> ParseLang(string str) { Dictionary<string, string> ret = new Dictionary<string, string>(); MultilangObject mo = JsonUtility.FromJson<MultilangObject>(str); if (mo == null) return null; foreach(MultilangElementJSON e in mo.elements) { Debug.Log(e.marker + ":" + e.text); dictonary.Add(e.marker, e.text); } return ret; }
Читаю так:
public string GetTranslate(string marker) { string ret=""; if (dictonary.Count == 0) Awake(); if (!dictonary.ContainsKey(marker)) Debug.LogAssertion(marker + " not found!!"); else ret = dictonary[marker]; return ret; }
Log:
UPD: с кодировкой тоже какая-то беда, но хотя бы @play должен был сработать
Первые, до загрузки манифеста - парсинг Json
|
(Offline)
|
|
15.12.2015, 22:00
|
#2
|
Бывалый
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений (для 995 пользователей)
|
Ответ: Dictionary
Покажи свои MultilangObject и MultilangElementJSON, какой-то у тебя парсинг невнятный. Чому сразу в словарь не парсишь, какая-то логика еще в объекте?
|
(Offline)
|
|
15.12.2015, 22:53
|
#3
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Dictionary
Сообщение от Andvrok
Покажи свои MultilangObject и MultilangElementJSON, какой-то у тебя парсинг невнятный. Чому сразу в словарь не парсишь, какая-то логика еще в объекте?
|
http://pastebin.com/HDR72C10
Нельзя сразу. JsonUtility не держит сериализацию/десериализацию словарей и подобных IDictionary , только Энумерабле. XML не хочу, так как часть уже в json.
По этому я делаю сохранение: Dictionary -> MultilangObject,
Загрузку: MultilangObject -> Dictionary
который:
public class MultilangObject{
public MultilangElementJSON[] elements;
}
public class MultilangElementJSON{ [SerializeField] public string marker; [SerializeField] public string text; }
Так как для JsonUtility нужен единичный объект, массив в любом виде не работает - выдает пустой json.
|
(Offline)
|
|
15.12.2015, 23:12
|
#4
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Dictionary
Я нашел ошибку!! Она есть в коде, который в первом посте. Ошибка лексического характера, которая не захватывает принципы работы объектов.
Хочу что бы вы нашли и поняли на что я потратил 3 часа.
Завтра покажу, если лень всем будет.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.12.2015, 01:08
|
#5
|
Бывалый
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений (для 995 пользователей)
|
Ответ: Dictionary
Ты добавляешь объекты в dictonary, а возвращаешь пустой ret.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.12.2015, 12:58
|
#6
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Dictionary
Сообщение от Andvrok
Ты добавляешь объекты в dictonary, а возвращаешь пустой ret.
|
|
(Offline)
|
|
13.01.2016, 16:13
|
#7
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Dictionary
пользуясь случаем хочу передать привет спросить, возможно ли добавить/удалить в словарь (dictonary) элемент со смещением всех остальных?
__________________
Абсолютли!
|
(Offline)
|
|
13.01.2016, 16:52
|
#8
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: Dictionary
Сообщение от ant0N
пользуясь случаем хочу передать привет спросить, возможно ли добавить/удалить в словарь (dictonary) элемент со смещением всех остальных?
|
Что значит со смещением всех остальных ?
__________________
|
(Offline)
|
|
13.01.2016, 17:00
|
#9
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Dictionary
у меня есть таблица с 10 объектами (индексы от 1 до 10)
я хочу добавить новый элемент по по индексу 1, мне нужно чтобы индексы всех остальных объектов сместились на +1
Я как бы сделал это через циклы (2 штуки!), но может есть штатное решение?
__________________
Абсолютли!
|
(Offline)
|
|
13.01.2016, 17:03
|
#10
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Dictionary
Т.е. ключом является int ?
Думаю, нет, так как идея Dictionary в том, что ключом является что угодно, а штатного решения для "чего угодно" для такой задачи быть не может.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.01.2016, 17:09
|
#11
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Dictionary
ну, нет так нет.
__________________
Абсолютли!
|
(Offline)
|
|
13.01.2016, 18:24
|
#12
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Ответ: Dictionary
Сообщение от ant0N
у меня есть таблица с 10 объектами (индексы от 1 до 10)
я хочу добавить новый элемент по по индексу 1, мне нужно чтобы индексы всех остальных объектов сместились на +1
Я как бы сделал это через циклы (2 штуки!), но может есть штатное решение?
|
А зачем 2 цикла? О_о
public static void IndexedDictionaryAdd( this Dictionary<int, object> dictionary, object element, int additionIndex ) { for( var index = additionIndex; index < dictionary.Count - 1; index++ ) { dictionary[index] = dictionary[index + 1]; } dictionary[additionIndex] = element; }
/offtop
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
Последний раз редактировалось Taugeshtu, 13.01.2016 в 20:18.
Причина: Пофиксил баг, лел.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо Taugeshtu за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:37.
|