Arralist en C# [Résolu]

Signaler
Messages postés
19
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
3 octobre 2011
-
Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012
-
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

Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012

Merci pour ce tuto c'est vraiment parfait!
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

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...
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

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();
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
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!
Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012

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;
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
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!