3

オブジェクトを持つ配列があります。これらのオブジェクトには、文字列、整数、および文字のプロパティがあります。

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

[...] 機能する値を埋めるための追加のコード

people 配列に格納されているすべてのオブジェクト person から、その人の年齢の最大値を取得したい (age プロパティは整数値)

4

7 に答える 7

8

最も簡単な方法は、LINQ を使用することです。

using System.Linq;

var maxVal = people.Max(x => x.Age); // get highest age
var person = people.First(x => x.Age == maxVal); // get someone with such an age
于 2013-04-18T22:42:19.520 に答える
0

上記の提案は、リストが比較的小さい (1000 オブジェクト未満) 場合に機能します。これは、上記のすべての方法が順次検索を使用しているためです。パフォーマンス (速度) のためには、qsort アプローチを適用する方がはるかに効率的です。例えば:

class PersonAgeComparer : IComparer<Person>
{
    public Int32 Compare(Person x, Person y)
    {                
        if (x.Age > y.Age) return 1;
        if (x.Age < y.Age) return -1;

        return 0; // must be equal
    }
}

class Person
{
    public Int32 Age { get; set; }
}

static void Run1()
{
    Random rnd = new Random((Int32)DateTime.Now.Ticks);

    List<Person> persons = new List<Person>();
    for (Int32 i = 0; i < 100000; i++)
    {
        persons.Add(new Person() { Age = rnd.Next(100) });
    }

    persons.Sort(new PersonAgeComparer());

    // The oldest but you may have dups (same age)
    Person oldest = persons[persons.Count - 1];

}
于 2013-04-19T02:24:23.507 に答える