Salut a tous,
tout est dans le titre. J'ai de tres serieux problemes de logique, ca veut pas rentrer dans ma tete, et si ca rentre c'est par par coeurisme a force de refaire 10 fois le meme exercice.
La pour le boulot j'ai un algorithme a faire et je suis coincé. en gros voici le probleme:
J'ai une table contratComponent avec une colonne ordre (int). j'ai plusieurs contrats avec leurs numeros d'ordre. je dois pouvoir modifier l'ordre.
ex. liste de 5 components.
components = [
{id: "comp1", order: 1},
{id: "comp2", order: 2},
{id: "comp3", order: 3},
{id: "comp4", order: 4}.
{id: "comp5", order: 5}
];
le component a changer est comp2 qui avait order = 2 et maintenant son newOrder = 3
{id: "comp2", order: 2} > {id: "comp2", order: 3}
1) liste triee avec comp2 enlevé:
components = [
{id: "comp1", order: 1},
{id: "comp3", order: 3},
{id: "comp4", order: 4}.
{id: "comp5", order: 5}
];
2) je decremente les ordres qui viennent apres comp2
components = [
{id: "comp1", order: 1},
{id: "comp3", order: 2},
{id: "comp4", order: 3}.
{id: "comp5", order: 4}
];
3) dans la liste il y avait deja un order = 3
{id: "comp3", order: 3} (qui est devenu {id: "comp3", order: 2})
4) donc j'incremente les order suivants
components = [
{id: "comp1", order: 1},
{id: "comp3", order: 2},
{id: "comp4", order: 4}.
{id: "comp5", order: 5}
];
5) je reinsere le component comp2 avec le newOrder:
components = [
{id: "comp1", order: 1},
{id: "comp3", order: 2},
{id: "comp2", order: 3},
{id: "comp4", order: 4}.
{id: "comp5", order: 5}
];
moi j'ai fait ca:
sauf que des l'entree de ma methode le contractComponent que je veux modifer a deja le newOrder et donc l'algo ne marche pas. Vous avez une idee de comment faire? Je suis desespere
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public void SetOrder(ref Contract contract, Guid contractComponentId, int newOrder) { ContractComponent? componentToMove = contract.ContractComponents .FirstOrDefault(c => c.Id == contractComponentId); List<ContractComponent> componentsListWithoutComponentToMove = contract.ContractComponents .Where(c => c.Id != contractComponentId) .OrderBy(c => c.Order) .ToList(); if (componentToMove == null) return; int oldOrder = componentToMove.Order; //if (oldOrder == newOrder) return; if (newOrder > oldOrder) { foreach (var component in componentsListWithoutComponentToMove .Where(c => c.Order > oldOrder && c.Order <= newOrder)) { component.Order -= 1; } } else { foreach (var component in componentsListWithoutComponentToMove .Where(c => c.Order >= newOrder && c.Order < oldOrder)) { component.Order += 1; } } componentToMove.Order = newOrder; componentsListWithoutComponentToMove.Add(componentToMove); componentsListWithoutComponentToMove = componentsListWithoutComponentToMove .OrderBy(c => c.Order) .ToList(); contract.ContractComponents = componentsListWithoutComponentToMove; }![]()
Partager