|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : juin 2009 Messages : 52 ![]() |
Bonjour !
Je me trouve face à un problème que je n'ai pas encore rencontré. Je travaille sur la 3D OpenGL avec une liste de vertex et d'indices afin de construire des polygones. J'ai une liste générique (List(Of)) contenant des instances d'une structure perso (Vertex3D). Cette liste peut-être en désordre. En parallèle, j'ai une autre liste contenant des indices (Integer). Pour construire des polygones, j'utilise ma liste d'indices que j'ai fais exprès de remplir dans l'ordre. J'entends par là que les 3 premiers indices me servent à récupérer 3 vertex dans ma première liste, les 3 prochains indices pour un deuxième polygone ...etc... Mon principal problème est d'enlever les doublons de la première liste tout en modifiant l'indice correspondant dans ma& liste d'indices. J'ai trouvé une multitude de faons d'enlever les doublons d'une liste sur le net, mais aucune n'est entièrement écrite à la main, et donc je ne peut pas modifier mes indices en même temps. De plus, j'ai souvent lu que a foutait le bazar dans une méthode quand on a besoin d'enlever des éléments tout en ayant accès à ses éléments. Existerait-il quelque part un exemple de suppression de doublons d'une liste générique entièrement écrite à la main ? Pour ce qui est de modifier les indices de ma deuxième liste en conséquence, je pense m'en sortir, mais je n'arrive à rien avec le problème de base. Merci d'avance pour votre aide. |
|
|
00
|
|
|
#2 | |||
|
Membre confirmé
![]() François DORINChef de Projet Inscription : décembre 2012 Messages : 103 ![]() |
Bonjour,
Citation:
Sinon, pour répondre à ta question, je pense qu'une manière simple de faire est de parcourir ta liste d'objet à l'aide des indices. Pour chaque objet, tu le recherches dans la liste et tu regardes l'indice de l'élément trouvé. S'il est égal à l'indice courant, alors c'est que c'est la première fois que l'objet est trouvé. Il n'y a rien à faire. S'il est inférieur, alors l'élément existe déjà. Tu peux donc le supprimer et mettre à jour ta liste d'indice. Voici un exemple de comment je ferais les choses : Code :
|
|||
|
00
|
|
|
#3 |
|
Membre Expert
![]() John DoeDéveloppeur .NET Inscription : novembre 2010 Messages : 902 ![]() |
Pourquoi tu n'utilises pas plutôt un dictionnaire avec comme clé tes indices et comme valeur tes vertex, si tes indices sont unique.
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2006 Messages : 5 389 ![]() |
Est-ce une simple question sur la technique de programmation ou un problème de performance ?
__________________
" Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : juin 2009 Messages : 52 ![]() |
Bonsoir, et merci pour vos réponses.
ElTotor: J'avoue ne pas avoir trop compris le principe...juste les grandes lignes. Mais ça m'ouvre d'autres perspectives. Il faut que je teste ça pour réellement comprendre le truc. Et merci pour l'info sur l'exception levée ![]() youtpout978: Oui, c'est avec un Dictionary que je pensais procéder, mais sans avoir fait de tests, cette méthode reste aussi un peu floue pour moi. Et non, ma liste d'indices ne contient pas forcément que des indices uniques. Du coup, je ne sais trop quoi utiliser comme clé. Graffito: C'est plus un problème technique qu'une histoire de performances, mais je sais que si je m'y prends mal je risque de mettre 10 secondes pour effectuer un truc qui n'est censé prendre qu'un temps infime. J'ai déjà du écrire un truc dans le genre, et c'était horriblement long alors qu'après correction ça se comptait en millisecondes. Merci beaucoup pour vos conseils. Je vais tenter le coup avec un Dictionary, et ElTotor, je garde ton principe sous le coude, car même si je ne comprends pas tout, je sens que a peu m'aider. Je repasse dans le coin si je n'arrive pas à me dépatouiller de ça |
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : juin 2009 Messages : 52 ![]() |
Bonjour, je repasse dans le coin juste pour dire que je m'en suis sorti avec un dictionnaire
J'ai utilisé un "OrderedDictionary" au lieu d'un dictionnaire générique car j'ai obligation de garder mes entrées dans leur ordre d'insertion. Je viens tout juste de découvrir qu'un simple dico générique ne garantit pas nécessairement que l'ordre sera le même Du coup, je me demande; qu'est-ce qui peut faire que l'ordre des éléments d'un dico générique (Dictionary(Of Tkey, Tvalue)) peut changer ? Je n'ai pas trouvé de réponses chez Microsoft. De plus je n'ai jamais remarqué de changement d'ordre avec un dico lors d'énumérations. |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() John DoeDéveloppeur .NET Inscription : novembre 2010 Messages : 902 ![]() |
|
|
|
00
|
|
|
#8 | |
|
Membre confirmé
![]() François DORINChef de Projet Inscription : décembre 2012 Messages : 103 ![]() |
Citation:
Peux-tu poster ton code ? Car j'avoue que j'ai du mal à imaginer une solution à base de dictionnaire (ou alors j'ai compris le problème de travers Merci d'avance |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com