Схема назначения клавиш для сортировки строк в таблице - PullRequest
0 голосов
/ 03 мая 2011

Я ищу схему для назначения ключей для строк в таблице, которая позволила бы перемещать строки и назначать новые местоположения в таблице без нумерации всей таблицы.

Что-то вроде наличияклавиши 1, 2, 3, 4, затем перемещая строку «2» между 3 и 4, а затем переименовывая ее в «3,5» (таким образом, вы получите 1, 3, 3,5, 4).Но схема должна быть «бесконечно» расширяемой (позволяющей, по крайней мере, несколько тысяч «случайных» перемещений строк, прежде чем обычно будет необходимо «нормализовать» ключи, и в худшем (наиболее патологическом) случае, допускающем 25-50 таких ходов).

И полученные ключи должны быть легко отсортированы, в идеале я бы хотел, чтобы они были "естественно" заказаны для запроса к базе данных (предположим, SQLite).

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 мая 2011

Эта проблема напоминает мне о проблеме нумерации строк , когда человек писал код в BASIC .В этой ситуации большинство людей сделали обоснованное предположение о том, сколько строк может быть вставлено между двумя строками.Тогда это предположение будет интервалом между этими линиями.Итак, если вы думаете, что у вас может быть 2000 вставок между двумя элементами, то вы можете сделать так, чтобы element1 имел ключ 2000, а make element2 иметь ключ 4000. Затем мы хотим поместить элемент между element1 или element2, и вы либо наивно разделите разницу(3000) или если у вас есть некоторая интуиция о том, сколько элементов будет на каждой стороне элемента 3, то вы можете взвесить его (например, 3500 вместо 3000).

Другая альтернатива (на самом деле это то же самое)но вы используете другую систему нумерации) это использовать числа с плавающей запятой, которые, я полагаю, вам не удалось.Между 1 и 2 будет 1,5.Между 1,5 и 2 будет 1,75.Между 1,5 и 1,75 будет 1,625 и т. Д.

Я бы рекомендовал использовать ключ, являющийся строкой.Лучше придерживаться цифровых клавиш, и, кроме того, вероятно, лучше иметь ключи целого типа, а не ключи с плавающей запятой, если вы можете помочь.

0 голосов
/ 04 мая 2011

Концептуально, вы можете рассматривать вашу таблицу как связанный список. Создайте таблицу с уникальным идентификатором, ключом, его следующим узлом и любыми другими данными, которые вы хотите. Просто вставляйте элементы последовательно, когда вам нужно поместить новый элемент между ними, просто поменяйте местами значения ключа и связанные родительские узлы. Значения ключа не останутся непротиворечивыми, но это то, для чего нужен дополнительный уникальный идентификатор, и это прекрасно работает и для упорядочения по ключу.

Действительно, поскольку у вас уже есть порядок, заданный ключом, вам даже не нужен «следующий узел». Ваша схема, как описано выше, должна быть в порядке, пока вы переименовываете ключи других узлов в дополнение к тому, который вы переместили - то есть, 2 и 3 меняют свои значения ключей.

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