web-dev-qa-db-fra.com

Obtenir un élément spécifique de la liste des tuples c #

J'ai une liste de tuples:

List<Tuple<int, string, int>> people = new List<Tuple<int, string, int>>();

En utilisant dataReader, je peux renseigner cette liste avec différentes valeurs:

people.Add(new Tuple<int, string, int>(myReader.GetInt32(4), myReader.GetString(3), myReader.GetInt32(5)));

Mais alors, comment puis-je parcourir, en obtenant chaque valeur individuelle. Par exemple, je souhaiterais peut-être lire les 3 détails concernant une personne spécifique. Disons qu'il y a un identifiant, un nom et un numéro de téléphone. Je veux quelque chose comme ce qui suit:

        for (int i = 0; i < people.Count; i++)
        {
            Console.WriteLine(people.Item1[i]); //the int
            Console.WriteLine(people.Item2[i]); //the string
            Console.WriteLine(people.Item3[i]); //the int       
        }
20
Wayneio

people est une liste, vous devez donc indexer dans la liste first , puis vous pouvez référencer l’élément de votre choix.

for (int i = 0; i < people.Count; i++)
{
    people[i].Item1;
    // Etc.
}

Gardez juste à l’esprit les types avec lesquels vous travaillez, et ce genre d’erreurs sera peu répandu.

people;          // Type: List<T> where T is Tuple<int, string, int>
people[i];       // Type: Tuple<int, string, int>
people[i].Item1; // Type: int
20
voithos

Vous indexez le mauvais objet. people est le tableau que vous souhaitez indexer, pas Item1. Item1 est simplement une valeur sur un objet donné de la collection people. Donc, vous feriez quelque chose comme ça:

for (int i = 0; i < people.Count; i++)
{
    Console.WriteLine(people[i].Item1); //the int
    Console.WriteLine(people[i].Item2); //the string
    Console.WriteLine(people[i].Item3); //the int       
}

En passant, je vous recommande fortement de créer un objet réel contenant ces valeurs au lieu de Tuple. Cela rend le reste du code (tel que cette boucle) beaucoup plus clair et facile à utiliser. Cela pourrait être quelque chose d'aussi simple que:

class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int SomeOtherValue { get; set; }
}

Ensuite, la boucle est grandement simplifiée:

foreach (var person in people)
{
    Console.WriteLine(person.ID);
    Console.WriteLine(person.Name);
    Console.WriteLine(person.SomeOtherValue);
}

Nul besoin de commentaires expliquant la signification des valeurs à ce stade, les valeurs elles-mêmes vous expliquent ce qu’elles signifient.

10
David

Est-ce tout ce que vous cherchez?

for (int i = 0; i < people.Count; i++)
{
    Console.WriteLine(people[i].Item1);
    Console.WriteLine(people[i].Item2);
    Console.WriteLine(people[i].Item3);       
}

ou en utilisant une foreach:

foreach (var item in people) 
{
    Console.WriteLine(item.Item1);
    Console.WriteLine(item.Item2);
    Console.WriteLine(item.Item3);
}
3
Tim

Vous devez changer où est votre indexeur, vous devez le mettre comme ceci:

for (int i = 0; i < people.Count; i++)
{
    Console.WriteLine(people[i].Item1); //the int
    Console.WriteLine(people[i].Item2); //the string
    Console.WriteLine(people[i].Item3); //the int       
}

Voilà!!

2
Dozer789

Essaye ça:

for (int i = 0; i < people.Count; i++)
    {
        Console.WriteLine(people[i].Item1); //the int
        Console.WriteLine(people[i].Item2); //the string
        Console.WriteLine(people[i].Item3); //the int       
    }
1
Daniel Möller

Vous devez reculer un peu l'indexeur:

for (int i = 0; i < people.Count; i++)
{
    Console.WriteLine(people[i].Item1); //the int
    Console.WriteLine(people[i].Item2); //the string
    Console.WriteLine(people[i].Item3); //the int       
}
1
It'sNotALie.
class Ctupple
{
    List<Tuple<int, string, DateTime>> tupple_list = new List<Tuple<int, string, DateTime>>();
    public void create_tupple()
    {
        for (int i = 0; i < 20; i++)
        {
            tupple_list.Add(new Tuple<int, string, DateTime>(i, "Dump", DateTime.Now));
        }
        StringBuilder sb = new StringBuilder();
        foreach (var v in tupple_list)
        {
            sb.Append(v.Item1);
            sb.Append("    ");
            sb.Append(v.Item2);
            sb.Append("    ");
            sb.Append(v.Item3);
            sb.Append(Environment.NewLine);
        }
        Console.WriteLine(sb.ToString());
        int j = 0;
    }
    public void update_tupple()
    {
        var vt = tupple_list.Find(s => s.Item1 == 10);
        int index = tupple_list.IndexOf(vt);
        vt = new Tuple<int, string, DateTime>(vt.Item1, "New Value" , vt.Item3);
        tupple_list.RemoveAt(index);
        tupple_list.Insert(index,vt);
        StringBuilder sb = new StringBuilder();
        foreach (var v in tupple_list)
        {
            sb.Append(v.Item1);
            sb.Append("    ");
            sb.Append(v.Item2);
            sb.Append("    ");
            sb.Append(v.Item3);
            sb.Append(Environment.NewLine);
        }
        Console.WriteLine(sb.ToString());
    }

}
0
Saurabh