@PRIYD

Как заполнить недостающие элементы словаря?

Здравствуйте, есть некий упорядоченный словарь SortedDictionary, с размерностью в 360 элементов, в который поступают данные {int, float}, где int є [0; 360](можете считать, что int - что-то типа id), float - любой. Но, загвоздка заключается в том, что в n-ом количестве элементов отсутствует значение у float.

Задача заполнить каждый пустой элемент словаря с помощью двух соседних элементов(переменная float равна их среднему арифметическому), при условии:
1. Если неизвестный float самый первый в словаре, то ему просто присваивается значение второго элемента.
2. Если неизвестный float стоит на последнем месте, то ему присваивается значение предпоследнего элемента.
3. Если несколько неизвестных элементов стоят в ряд, то значение float первого из таких элементов является средним арифметическим первого известного элемента перед этим рядом и первого известного элемента после этого ряда.

Приведу наглядный пример(пусть "?" является неизвеcтным float):
{{1, ?}, {2, 20}, {3, 18}, {4, ?}, {5, ?}, {6, ?}, {7, 13}, ..., {359, 8}, {360, ?}}

P.S. Алгоритм вроде простейший, но, походу, недоспал сегодня и вообще не понимаю, что тут делать.
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
1 - думаю тег Unity тут лишний ))
2 -
3. Если несколько неизвестных элементов стоят в ряд, то значение float первого из таких элементов является средним арифметическим первого известного элемента перед этим рядом и первого известного элемента после этого ряда.
ну тут что то из ряда выпадает.. почему не построить дискретный ряд средних между начальным и конечным? .. но это тоже мысли в слух. если у вас условия заданы извне или вы жестко настаиваете что так и только так дело то хозяйское
3 - все три (ваших. по тексту вопроса) пункта, весьма просты. вопрос(ы) только в том:
- когда вы обнаруживаете нехватку значений?
- когда коррекцию надо выполнять?
- .. как то сведите эти события к решению ;)))
4 - а вот тут, единственный момент, который, на мой взгляд, вам важнее всего усвоить в контексте вопроса
- ключ в c# dictionary уникален
- вы ограничиваете значения диапазоном [0-360] (кстати, почему не [0-359] или [1-360]? ну как хотите)
- вам точно проще использовать массив float[360]. не благодарите вру, люблю отметки. и этот пункт, на данный момент, самый ценный для вас ;))

ps что то подумалось.. вам наверное надо как то отличить значения, которые еще ни когда не инициализировались?.. возможно подойдет float?[360] (Nullable) это хороший способ отличить значение, которое еще не принимало численную величину, не создавая при этом каких других заумных абстракций..
.. и даже обозначить случай, когда ранее определенной величине, надо присвоить значение, которое четко говорит а теперь мы опять не знаем числа, и настаиваем на неопределенности значения
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы