Bien le bonjour.
Je souhaiterai savoir si en C#, il est possible pour un tableau de le faire commencer a l'indice 1, et si oui, de quelle maniere.
Merci d'avance.
Bien le bonjour.
Je souhaiterai savoir si en C#, il est possible pour un tableau de le faire commencer a l'indice 1, et si oui, de quelle maniere.
Merci d'avance.
Un tableau commencera toujours à partir de l'indice 0, maintenant libre à toi de l'utiliser à partir de l'indice 1, bien que je n'en vois aps l'interet.
Essaie de nous préciser le but de faire commencer un tableau à 1, peut être que tu emploie une solution non idéale à ton problème, ce qui fait que tu sois devant cet obstacle.
C'est en rapport avec un exercice sur des lignes de bus. Il me serait difficile d'avoir une ligne 0, vu que l'indice de mon tableau correspont a mon numero de ligne.
Mais en effet, je n'avais pas pensé a occulter la premiere case du tableau tout betement.
Merci.
Ton indice pourrait être ta ligne -1. Ainsi tu stoque la ligne 1 dans la case 0, la 2 dans 1, la 3 dans 2, ...
Ce n'est qu'une repésentation des choses, ce serait bête de perdre une case pour cela
Tu melange représentation métier et implémentation => tu cours droit dans le mur
Sérieusement, tu peux t'en sortir comme ca, bien sur. Mais il vaudrait mieux avoir une classe LigneDeBus qui contient le numéro de ligne. Ensuite tu fais une List<LigneDeBus> et pour accéder à une ligne particulière tu fait un delegate :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 List<LigneDeBus> malist; //remplissage LigneDeBus L1 = malist.Find(delegate(LigneDeBus item){return item.Num==1});
Le pauvre déjà qu'il ne maitrise pas les représentation sous forme de tableau
Justement, les List sont peut être plus intuitives pour lui.
Bon, ok, le delegate c'est ptet un peu hâtif... Mais les list<> ca devrait pas trop poser de problème, et ca gère en plus le problème de 'sizing' des tableaux.
Tout à fait d'accord.
Et en effet je pense que le délégate arrive un peu trop tot.
Peut être ne connait il même pas la notion de pointeur
Ah les pointeurs... Penses tu qu'il aies besoin de savoir ce que c'est pour manipuler une liste ? Sincèrement je pense que non... Vu l'API, il est aisé selon moi d'aborder le sujet sans notions complexes telles que les pointeurs (bien que cela aide évidememnt).. M'enfin on s'écarte du sujet
Ha non je parlais des pointeurs pour comprendre les delegates, perso je pense que sans notion de pointeur, leurs fonctionnement soient compréhensible.
T'inquiète je ne pensais pas revenir ou liste chainées, au structure c qui possède un pointeur suivant et un précedent pour les implémentés, pour expliquer ce qu'est une liste.
Je pense que faire référence à une liste de course c'est plus simple
Etrangement, dans le cas d'un Find sur une liste, ou d'un ForEach , je ne pense pas les delegate comme des pointeurs de fonction... Bien que cela en soit !
Quand j'écris :
Je pense utiliser une syntaxe pour (et je pense de cette manière) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part malist.Find(delegate(LigneDeBus item){return item.Num==1});
Et pas du tout pointeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part malist.Find( where item.Num==1);
Je dois etre en avance sur le 3.5... :-D
Sinon la liste de courses c'est pas mal comme image pour une List<>
Pour resumer:
Soit tu utilises un tableau normal sans te soucier de la case 0 (Fais attention lorsque tu parcours ton tableau).
Soit tu utilises un tableau normal en decalant les indices a inserer (Lorsque tu veux inserer 2, tu inseres 2-1 donc 1 et lorsque tu recuperes une valeur tu sais que c'est indice en cours + 1).
Soit tu utilises une List<> sans te soucier de la taille ou des indices comme dans un tableau.
Conseil: C'est toujours interressant de savoir se servir de List ou Hashtable ou ArrayList et c'est pas tres complique a utiliser.
Moi dans ton cas j'aurai utilise une Hashtable(Cle, Valeur) car si tes lignes de bus portent un numero et un nom tu peux les remplir comme cela:
Attention a ne pas entrer 2 fois la meme cle. Et lorsque tu veux savoir le nom de ta seconde ligne de bus par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Hashtable MesLignesDeBus = new Hashtable(); MesLigneDeBus.Add(1, "Premiere ligne"); MesLigneDeBus.Add(2, "Deuxieme ligne"); . . .
Tu peux bien sur parcourir ta Hashtable, changer les valeurs, supprimer les valeurs et surtout tu peux commencer ton indice a 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part string NomDeMaLigne = MesLignesDeBus[2].ToString();
En effet la HashTable est une alternative plaisante. D'autant plus qu'on peut type la clef et la valeur et y mettre toute classe interressante, genre LigneDeBusIdentifiant => LigneDeBus
Attention en ce cas à définir la comparaison (et la manière de hasher ?).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager