CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Effacer les éléments doubles tableau

Chweps
Chweps
Niveau 10
17 juillet 2010 à 22:23:47

Je cherche un code (en vba excel ou en C) qui permettrait d'effacer les éléments qui sont au moins en double d'un tableau, pour ne garder qu'un exemplaire de chaque élément.

Par exemple si y'a dans mon tableau :
yannick0011,
grosse_nouille,
grosse_nouille,
grosse_nouille,
yannick0011
toine3105

A la fin j'ai :
yannick0011,
grosse_nouille,
toine3105

:svp:

kufa
kufa
Niveau 9
18 juillet 2010 à 00:11:12

De quels tableaux parles-tu? Ca ne pourrait pas etre plus vague...
Est-ce une feuille Excel, un array en C, un vector en c++, un fichier texte avec une entree par ligne, etc?

Chweps
Chweps
Niveau 10
18 juillet 2010 à 13:51:59

C'est un tableau de caractères tout simple genre
Dim tab() as String
dont la taille peut varier mais bon comme peu de monde utilise vba excel je me suis dit qu'en C j'aurai plus de réponses et qu'après je pourrais me débrouiller pour convertir en vba.

Chweps
Chweps
Niveau 10
18 juillet 2010 à 13:58:26

Et en C mon tableau serait déclaré comme
char tab[]
et remplit avec ce que j'ai dit plus haut.

dnob700
dnob700
Niveau 10
18 juillet 2010 à 17:17:34

Non, il ne serait certainement pas déclaré comme ça en C.

Si l'ordre des éléments ne t'importe pas. Le moyen le plus simple est de commencer par trier ton tableau (il y a surement des fonctions déjà faites pour ça) et ensuite à éliminer tout les éléments qui sont identique à celui qui le précède par exemple (tu peut recopier petit à petit les éléments que tu n'enlève as dans un nouveau tableau). Si l'ordre de tes éléments est important, alors tu peut passer par une table de hachage pour stocker les éléments que tu as déjà vu, mais c'est plus complexe et tu n'en as peut-être pas besoin.

LeSociopathe
LeSociopathe
Niveau 10
18 juillet 2010 à 18:40:26

ça ne me paraît pas très compliqué.

à supposer que tu veuilles garder les éléments dans l'ordre où ils sont :

tu pars de la première case.
-d'abord, si elle est vide, tu cherches la prochaine case qui n'est pas vide et tu échanges leurs contenus respectifs
-ensuite, tu parcours les cases du tableau et chaque fois que tu tombes sur un doublon, tu vides la case incriminée (tu mets NULL ou "" dedans ou je ne sais quoi en fonction du type de valeurs que contient ton tableau).

et tu fais ça pour chaque case de ton tableau.

en C ça doit ressembler à ça :

for (int i=0 ; i<INDEX_MAX ; i++)
{

if (tableau[i]=NULL)
{
while (int j=i+1 <= INDEX_MAX & tableau[j]=NULL)
{j++;};
if(j<=INDEX_MAX)
{tableau[i]=tableau[j];tableau[j]=NULL;}
}

while (j=i < INDEX_MAX)
{
j++
if (tableau[j]==tableau[i])
{tableau[j]=NULL;}
}
}

je ne connais pas le C donc je ne peux pas garantir que la syntaxe est correcte, et il est possible qu'il y ait des erreurs, mais enfin c'est l'idée :(

dnob700
dnob700
Niveau 10
18 juillet 2010 à 23:24:49

C'est pas idiot comme méthode. C'est du O(n²) contre (n*log(n)) pour ce que j'ai proposé, mais c'est relativement simple. Par contre, ça doit assez mal s'adapter au cas du VBS.

dnob700
dnob700
Niveau 10
18 juillet 2010 à 23:25:23

P.S. Et avec les tables de hachage, ont peut le faire en O(n) à peu près.

Chweps
Chweps
Niveau 10
19 juillet 2010 à 14:41:06

Finalement j'ai réussi à ma manière :content: après il manque juste une fonction pour redéplacer les noms de manière à ce qu'ils soient à la suite les uns des autres (sans trou dans le tableau)

//*On compare chacun des éléments du tableau avec tous les autres éléments du tableau *//
For i = 0 To index_max
For j = 0 To index_max - 1
//*On ne compare pas l'élément du tableau avec lui même*//
If j = i - 1 Then GoTo Saut2
If tab(i) = tab(j + 1) And tab(i) <> "" Then tab(j + 1) = ""
Saut2:
Next j
Next i

LeSociopathe
LeSociopathe
Niveau 10
19 juillet 2010 à 18:24:31

mais :

-je ne comprends pas pourquoi tu utilises j+1 (même quand tu écris "if j=i-1" ça revient à écrire : "if j+1=i") alors que tu ne devrais pas le faire si tu initialisais j à 1 et pas à 0.

-si tu parcours le tableau avec i à partir de la case 0, et que chaque fois tu élimines les doublons, tu es sûr que toutes les cases précédemment pointées par i n'ont plus de doublon. Donc, plus besoin de les vérifier. Donc, tu peux commencer la vérification à (i+1) et écrire :

For j=i+1 To index_max

comme ça tu peux supprimer la vérification "if j=i-1"

Chweps
Chweps
Niveau 10
19 juillet 2010 à 21:59:35

Ouaip t'as surement raison je testerai mais la rapidité est pas primordial pour mon projet.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment