私は次のようなコレクションを持っており、コレクション内で最も高い整数を見つける必要があります。それは任意の数の整数を持つことができ、私は同じ整数値を複数回持つことができます。C#を使用して汎用リストの中で最大の整数を見つける?
List<int> MyList = new List<int> { 3, 4, 6, 7, 9, 3, 4, 5, 5 };
最も高い整数を見つけるのに最も簡単なアルゴリズムは何ですか?私はC#と.NET 3.5フレームワークを使用しています。
私は次のようなコレクションを持っており、コレクション内で最も高い整数を見つける必要があります。それは任意の数の整数を持つことができ、私は同じ整数値を複数回持つことができます。C#を使用して汎用リストの中で最大の整数を見つける?
List<int> MyList = new List<int> { 3, 4, 6, 7, 9, 3, 4, 5, 5 };
最も高い整数を見つけるのに最も簡単なアルゴリズムは何ですか?私はC#と.NET 3.5フレームワークを使用しています。
をSystem.Linqを使用して追加してください。 としてMaxが拡張メソッドです。 – aquinas
最大値を頻繁に取得する必要がある場合は、最大アイテムをキャッシュに保持する独自のリストクラスを作成する(またはリストから派生させる)ことも考えられます。このようなクラスは次のようになります。また
public class MaxList<T> : IList<T>, ICollection<T>, IEnumerable<T>
{
T Maximum { get; set; }
List<T> _list;
public T this[int index] { get; set; }
public void Add(T item)
{
if (item > this.Maximum)
{
this.Maximum = item;
}
_list.Add(item);
}
// ... IEnumerable<T>, ICollection<T> and IList<T> members
}
、あなたは直接リストから派生し、追加と削除メソッドを上書き(基本的にすべてのメソッドは、リストの項目を変更)し、それに応じてキャッシュを更新することができます。
このようなアプローチが本当に効果があるかどうかは、シナリオによって異なります。あなたが非常に大きなリストを持っていて、めったに更新されず、頻繁に最大値を取得する必要がある場合、ITは間違いなくです。そうでなければ、すでに提案されている解決法ははるかに簡単であるため、
最大値が現在有効かどうかを示す状態が必要です。最大値に等しい項目が削除された場合は、無効にする必要があります。この場合、getメソッドは新しい最大のためにリストを再スキャンする必要があります(おそらくMax拡張メソッドを使用します)。ソートされたリストを使用することもできますが、それに関連する他の価格もあります。 – Brian
はい、あなたは正しいです。私は怠け者であり、キャッシュを無効にする必要があるremoveメソッドとインデクサーを削除しただけで、sceletonクラスを提供しました。私はまた、Enumberable.Maxを使用している可能性のあるキャッシュを再計算する方法を廃止しました。 –
genericlist.Remove(genericlist.Max)
無制限?それは多くの整数です。 – Hardwareguy
私はこれがトリック質問だと信じています。 – Groo
@Groo - トリック質問ではありません。 –