Obtenir la valeur Max à partir d'objets de tableau en C#
J'ai un tableau qui contient des objets, ces objets ont une chaîne de caractères, un entier, et un char propriétés.
Person[] people = new Person[1]; //Declare the array of objects
[...] This code is irrelevant
Person person = new Person(name, age, gender); //This creates instance a new object
people.SetValue(person, i); //is just a variable which increase in a c
Array.Resize(ref people, people.Length + 1); //Change array size
i++; //Autoincrement
[...] Plus de code pour remplir les valeurs qui fonctionne
De tous les objets de la personne stockées dans les gens tableau, je veux obtenir de l'âge de la personne à une valeur max (âge de la propriété est la valeur entière)
- La valeur de max lui-même, ou la personne (ou des personnes), la valeur max? Si l'ancien, vous pouvez simplement utiliser
people.Max(person => person.Age);
Aussi, ne pas le faire en manuel tableau de redimensionnement de ce genre. Utiliser unList<Person>
, qui va gérer le redimensionnement pour vous. - "est juste une variable qui augmente dans un c" qu'est-ce que "c"?
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple est d'utiliser LINQ:
Vous ne devriez vraiment pas être l'aide d'un tableau, si vous allez redimensionner à chaque fois que vous ajoutez un nouvel élément. C'est ce que le générique
List
classe. Vous pouvez écrire:La
List
prend en charge le redimensionnement de la sauvegarde de tableau quand il en a besoin. Il est beaucoup plus facile et plus efficace que le redimensionnement d'un tableau à chaque fois que vous ajoutez un élément.Pour obtenir le maximum de l'âge, vous pouvez utiliser l'une des expressions LINQ montré dans les autres réponses. Si vous souhaitez que l'enregistrement qui a de la valeur maximale, vous devez effectuer une itération sur la liste:
Je suis en supposant que votre Personne de classe ressemble à quelque chose comme ceci: -
Améliorations
Si vous avez une Énumération de
Person
, c'est à dire "le peuple", pour lequel je vous conseille d'utiliser un récipient avec une interface comme un IList, j'.e: -Comme cela vous évitera d'avoir à redimensionner votre tableau manuellement.
Solution
À acquérir le plus grand âge, vous pouvez faire quelque chose comme: -
Lecture
C'est une requête Linq; plus d'informations peuvent être trouvées ici: -
http://msdn.microsoft.com/en-gb/library/vstudio/bb397926.aspx
Il y a beaucoup de "cool" des choses que vous pouvez faire avec linq, telles que la sélection d'une énumération des âges, c'est à dire
Ce serait de retour une énumération contenant de l'âge de chaque personne de votre liste. Si vous voulez que toutes les personnes d'un certain âge, vous pouvez utiliser
Where
, j'.e: -Je suis complètement d'accord avec le commentaire laissé par @dlev, en ce que vous ne devriez pas être à l'aide du traditionnel
Tableaux
, mais plutôt d'utiliserList<T>
qui gère automatiquement le redimensionnement de votre collection.En outre, parce que les deux
Array
etList<T>
à la fois de mettre en œuvre IEnumerable vous pouvez utiliser LINQ pour manipuler vos éléments, en fait, prendre un coup d'oeil à la toute la liste des méthodes disponible pour vous.Des exemples précis pour votre scénario:
Quelque chose comme cela ne vous sera d':
Ou vous rouler propre:
Utilisation:
Ce qui a été suggéré ci-dessus ne fonctionne pas si la liste est relativement faible (moins de 1 000 objets). C'est parce que toutes les méthodes ci-dessus, l'utilisation séquentielle de recherche. Pour des fins de performances (vitesse), l'application d'un qsort approche est beaucoup plus efficace. Par exemple: