リストがありますList<MyType>
、私のタイプにはAge
とRandomID
が含まれます
今、私はこのリストから最大年齢を見つけたいです。
最も簡単で効率的な方法は何ですか?
さて、LINQがない場合は、ハードコーディングできます。
public int FindMaxAge(List<MyType> list)
{
if (list.Count == 0)
{
throw new InvalidOperationException("Empty list");
}
int maxAge = int.MinValue;
foreach (MyType type in list)
{
if (type.Age > maxAge)
{
maxAge = type.Age;
}
}
return maxAge;
}
または、多くのリストタイプで再利用可能な、より一般的なバージョンを作成することもできます。
public int FindMaxValue<T>(List<T> list, Converter<T, int> projection)
{
if (list.Count == 0)
{
throw new InvalidOperationException("Empty list");
}
int maxValue = int.MinValue;
foreach (T item in list)
{
int value = projection(item);
if (value > maxValue)
{
maxValue = value;
}
}
return maxValue;
}
これは以下で使用できます。
// C# 2
int maxAge = FindMax(list, delegate(MyType x) { return x.Age; });
// C# 3
int maxAge = FindMax(list, x => x.Age);
または、 LINQBridge :)を使用できます
いずれの場合も、必要に応じてMath.Max
への単純な呼び出しでifブロックを返すことができます。例えば:
foreach (T item in list)
{
maxValue = Math.Max(maxValue, projection(item));
}
int max = myList.Max(r => r.Age);
http://msdn.Microsoft.com/en-us/library/system.linq.enumerable.max.aspx
thelist.Max(e => e.age);
var maxAge = list.Max(x => x.Age);
この方法はどうですか:
_List<int> myList = new List<int>(){1, 2, 3, 4}; //or any other type
myList.Sort();
int greatestValue = myList[ myList.Count - 1 ];
_
基本的に、独自のメソッドを記述する代わりに、Sort()
メソッドにジョブを実行させます。コレクションをソートしたくない場合を除きます。
最も簡単な方法は、前述のようにSystem.Linqを使用することです
using System.Linq;
public int GetHighestValue(List<MyTypes> list)
{
return list.Count > 0 ? list.Max(t => t.Age) : 0; //could also return -1
}
これは辞書でも可能です
using System.Linq;
public int GetHighestValue(Dictionary<MyTypes, OtherType> obj)
{
return obj.Count > 0 ? obj.Max(t => t.Key.Age) : 0; //could also return -1
}