Порядок основных данных: Могу ли я использовать поплавок? - PullRequest
2 голосов
/ 09 ноября 2010

Я размышлял, как лучше заказать набор управляемых объектов Core Data, и я хотел бы выдвинуть идею, которую я раньше не видел, в надежде, что кто-то с большим опытом работы с CompSci сможет сказать мне, если / почему это плохая идея: можем ли мы использовать плавающие элементы для упорядочивания управляемых объектов Core Data?

Ситуация такова:

Для простоты, скажем, в школе много учителей.

Школа >> Учитель

Как правило, порядок Учителей останется прежним (1, 2, 3, 4, 5), но иногда я, например, захочу переместить Учителя № 5 между Учителем 1 и Учителем 2.

Обычный способ создания индекса с использованием целых чисел означал бы, что мне нужно будет переупорядочить четыре из пяти моделей. Что мне интересно, так это то, что если бы я использовал поплавок для заказа моделей? Затем для наших пяти моделей Учителей они начнутся так:

</p> <p>t1.order = 1.0;</p> <p>t2.order = 2.0;</p> <p>t3.order = 3.0;</p> <p>t4.order = 4.0;</p> <p>t5.order = 5.0;</p> <p>

И когда я хочу переместить t5 между t1 и t2, я выполняю эту операцию:

t5.order = ( t1.order + t2.order ) / 2.0;

Итак, новый список выглядит так:

</p> <p>t1.order = 1.0;</p> <p>t5.order = 1.5;</p> <p>t2.order = 2.0;</p> <p>t3.order = 3.0;</p> <p>t4.order = 4.0;</p> <p>

Теперь мой список отсортирован так, как я хочу, и мне нужно было обновить только одну запись. Я даже могу переместить t3 между t5 и t2:

t3.order = ( t5.order + t2.order ) / 2.0;

</p> <p>t1.order = 1.0;</p> <p>t5.order = 1.5;</p> <p>t3.order = 1.75;</p> <p>t2.order = 2.0;</p> <p>t4.order = 4.0;</p> <p>

Должна быть причина, почему это не способ . Конечно, когда вы сортируете, сортируете и сортируете, вы в конечном итоге получите очень длинные числа с плавающей запятой и, возможно, в какой-то момент погаснет точность, но время от времени вы можете сбросить порядок на 1.0, 2.0, 3.0. .n.0.

Может кто-нибудь отговорить меня от этого?

1 Ответ

1 голос
/ 09 ноября 2010

Это разумный подход, учитывая ограничение, которое вы уже указали: вероятность столкновений из-за пределов точности.Конечно, вы можете придерживаться целых чисел и начинать с индексации с шагом, скажем, 10000.

В любом случае вам нужно будет иметь возможность обнаружить столкновение и предпринять необходимые действия, когда это произойдет.Так как вы действительно просто озабочены «порядком», вы также можете время от времени перекалибровать свои индексы.Если набор объектов достаточно короткий, вы можете отсортировать их по существующему «порядку» в массив, а затем перебрать массив, присваивая новые значения «порядка» с указанными приращениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...