Arralist en C#

Résolu
chiro2000 Messages postés 19 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 3 octobre 2011 - 1 nov. 2010 à 20:59
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012 - 8 nov. 2010 à 09:45
Bonsoir

j' aimerai savoir s il est possible d'utiliser un arraylist compose de deux champs si oui, comment on le declare
et comment acceder au champs de ce arraylist.


private struct Note_eleve
{

string NomMatiere;
int valeur;
}

j ai essayer ca mais ca n marche pas;
private Arraylist<Note_eleve> = new ArrayList<Note_eleve>();

6 réponses

l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
8 nov. 2010 à 09:45
Merci pour ce tuto c'est vraiment parfait!
3
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
1 nov. 2010 à 21:47
Bonsoir,

La question a déjà été abordée ici par "jerome_p":

Sur ce lien

Je regarde comment récupérer les champs de l'ArrayList...
0
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
1 nov. 2010 à 23:02
Au lieu d'utiliser ArrayList ou pire dataTable, tu peux utiliser List<T> qui contient des objets typés

List<String[]> list = new List<String[]>();

// Par exemple...
string[] tab1 = new string[2];
tab1[0] = "chaine1";
tab1[1] = "chaine2";            
list.Add(tab1);

string[] tab2 = new string[2];
tab2[0] = "chaine1";
tab2[1] = "chaine2";
list.Add(tab2);

foreach (string[] item in list)
{
     // Tu récupères ici tes valeurs
     System.Console.WriteLine(item[0] + " " + item[1]);
}
System.Console.ReadLine();
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
2 nov. 2010 à 00:34
Bonsoir

pour revenir sur ton exemple du départ.
à ma connaissance il n'existe pas d'ArrayList generic (mais je ne connais pas le .net 4)

donc dans ton cas il faut passer par une liste
private List<Note_eleve> NoteDesEleves = new List<Note_eleve>();

ensuite transforme Note_eleve en une classe
genre :
private class Note_eleve 
{ 
  public string NomMatiere {get; private set;}
  public int valeur {get; private set;}
  public Note_eleve (string matiere, int note)
  {
    NomMatiere = matiere;
    valeur = note;
  }
} 

puis pour peupler la liste
NoteDesEleves.Add( new Note_eleve ("Géographie",0));
...

mais sans doute as-tu besoin d'un index, pour retrouver une note,
utilise alors un Dictionary, c'est une liste indexée.

ex:
//indexée sur le nom de la matiere
public Dictionary<string,Note_eleve> NoteDesEleves = new Dictionary<string,Note_eleve>();

NoteDesEleves.Add("Géographie", new Note_eleve ("Géographie",0));

// pour retrouver la note de géo:
int noteGeo= NoteDesEleves["Géographie"].valeur;



(j'ai tappé le code directement ici, il est donc possible qu'il y ai de petites erreurs).

Bon code
Bob

C# is amazing, enjoy it!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
5 nov. 2010 à 11:24
Bonjour,

Juste pour comprendre un peu mieux les listes, peut on faire ca (probleme de clavier je ne trouve pas le crochet fermer);

string matiere = NoteDesEleves[5 .NomMatiere;

peut on declarer
Dictionary<string, int, bool> dict = new Dictionary<string, int, bool>();

et si je declare:
private class Note_eleve
{
public string NomMatiere {get; private set;}
public int valeur {get; private set;}
public string nomEleve{get;private set}
public Note_eleve (string matiere, int note, string eleve)
{
NomMatiere = matiere;
valeur = note;
nomEleve = eleve;
}
}
peut on;
string nomEleve= NoteDesEleves["Géographie"].nomEleve;
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
7 nov. 2010 à 18:33
Bonsoir

oui tu peux écrire
   string matiere = NoteDesEleves[5].NomMatiere; 

si NoteDesEleves est une liste d'objet ayant une propriété NomMatiere de type string

non tu ne oeux pas écrire
   Dictionary<string, int, bool> dict = new Dictionary<string, int, bool>(); 

un dictionaire est une liste d'objet avec un index
mais tu pourrais écrire
   Dictionary<string, Dictionary> dict = new Dictionary<string, Dictionary>();

un dictionaire de dictionaires

et oui, pour ton exemple tu peux écrire
  string nomEleve= NoteDesEleves["Géographie"].nomEleve; 



Pour ton cas, je pense qu'il te faut un liste, ou un dictionaire, d'éleves ayant chacun une liste, ou un dictionaire, de notes
Ce qui te permetrait facilement de retrouver tes differentes données
exemple;
private class Note_eleve
{
public string NomMatiere { get; private set; }
public int Valeur { get; private set; }
public Note_eleve(string matiere, int note)
{
NomMatiere = matiere;
Valeur = note;
}
}
private class Eleve
{
public string Nom { get; private set; }
public string Adresse { get; private set; }
public Dictionary<string, Note_eleve> Notes = new Dictionary<string, Note_eleve>();//ses notes
public Eleve(string nom, string adresse)
{
Nom = nom;
Adresse = adresse;
}

}
public void testEleve()
{
//Liste des eleves
Dictionary<string, Eleve> Eleves = new Dictionary<string, Eleve>();

//on crée un eleve
Eleve moi = new Eleve("Moi", "Pessac");
Eleves.Add("Moi", moi);
//on lui donne ses notes
moi.Notes.Add("Géographie", new Note_eleve("Géographie", 12));
moi.Notes.Add("Math",new Note_eleve("Math", 16));
moi.Notes.Add("Français", new Note_eleve("Français", 10));

//on crée un autre eleve
Eleve toi = new Eleve("Toi", "Paris");
Eleves.Add("Toi", toi);
//et on lui donne ses notes
toi.Notes.Add("Géographie", new Note_eleve("Géographie", 13));
toi.Notes.Add("Math", new Note_eleve("Math", 17));
toi.Notes.Add("Français", new Note_eleve("Français", 11));

//recherche d'une note d'une matiere donnée pour un eleve donné
int MaNoteDeFrancais = Eleves["Moi"].Notes["Français"].Valeur;

//recherche toutes les notes d'une matiere
foreach (Eleve eleve in Eleves.Values)
{
Console.WriteLine("Eleve:{0}  note de géo:{1}", eleve.Nom, eleve.Notes["Géographie"].Valeur);
}
//recherche toutes les notes d'un éléve
foreach (Note_eleve note in Eleves["Toi"].Notes.Values)
{
Console.WriteLine("Note de {0} = {1}", note.NomMatiere,note.Valeur);
}
}


Bob

C# is amazing, enjoy it!
0
Rejoignez-nous