В моем приложении есть класс, называемый вкладками, и каждая из этих вкладок имеет свой собственный порядковый номер.
Можно установить порядковый номер через пользовательский интерфейс, и в зависимости от того, как порядковые номера установлены в тех же вкладках порядка, будут отображается для конечного пользователя (в интерфейсе).
public class Tab
{
public int Id { get; set; }
public string Title { get; set; }
public int Order { get; set; }
}
Итак, в основном, если у меня есть ситуация, когда я определил 4 вкладки, например:
{Id: 1, Title: First Tab, Order: 1},
{Id: 2, Title: Second Tab, Order: 2},
{Id: 3, Title: Third Tab, Order: 3},
{Id: 4, Title: Fourth Tab, Order: 4}
И если я решу, что вкладка с Id: 3 будет отображаться первой, я бы сделал что-то вроде этого:
{Id: 1, Title: First Tab, Order: 1},
{Id: 2, Title: Second Tab, Order: 2},
{Id: 3, Title: Third Tab, Order: 1},
{Id: 4, Title: Fourth Tab, Order: 4}
как видите, теперь у нас есть две вкладки с Order: 1 в одном массиве.
Мой вопрос в том, как я могу после установки Order на 1 для вкладки с Id: 3, пересчитать вкладки заказы таким образом: я вручную установил порядок 1, так что это новый 1, вкладка, на которой порядок 1 теперь становится 2, 3 устанавливается вручную на 1, как мы говорили ранее, старый 3 становится 4 .. Любая помощь была бы потрясающей !
Спасибо всем заранее!
@SvyatoslavDanyliv спасибо за рекомендацию! Не могли бы вы опубликовать пример в форме ответа, чтобы я мог попытаться реализовать его. Большое спасибо.
Если заказ имеет значение и может иметь любое другое значение. Это может быть один из таких случаев:
Алгоритм, который вы хотите реализовать, будет выглядеть так:
private void ChangeOrder(Tab tabToUpdate, int orderToGive, List<Tab> tabs)
{
if (tabToUpdate.Order > orderToGive)
{
var tabsToUpdate = tabs.Where(t => t.Order >= orderToGive && t.Order < tabToUpdate.Order);
foreach (var tab in tabsToUpdate)
{
tab.Order++;
}
}
else if (tabToUpdate.Order < orderToGive)
{
var tabsToUpdate = tabs.Where(t => t.Order <= orderToGive && t.Order > tabToUpdate.Order);
foreach (var tab in tabsToUpdate)
{
tab.Order--;
}
}
tabToUpdate.Order = orderToGive;
}
Вы должны переименовать переменную по своему усмотрению. Конечно, это не идеальный алгоритм, я дал вам только ориентир.
Чтобы решить подобные проблемы в будущем, попробуйте разбить задачу на более мелкие, как видите, окончательный алгоритм действительно базовый.
Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.
@Dynek, можешь привести полный пример, приятель, я пытался, но это не работает. Можете ли вы добавить, пожалуйста, сценарий, где orderToGive > tabToUpdate.Order
Сделанный. Вы пробовали первую часть алгоритма? Это работает?
похоже, что оба случая работают так, как ожидалось!
Сделайте
Order
какdouble
. А если вам нужно переместить вкладку влево, используйте деление ордеров на 2 для двух последующих вкладок. В вашем случае это (0 + 1)/2 = 0,5. Тогда вам не нужно менять порядок других предметов.