5

この質問は、SOでいずれかの方法で質問されましたが、このようにはなりません。統計的な解決策を探していた非常に基本的な問題に遭遇しました:-)2つの整数プロパティを持つオブジェクトのリストを取得しました。ここで、リスト内のすべてのオブジェクトの両方のプロパティの最大値を見つけたいと思います。
私は3つの解決策を思いついた:

最初のアプローチ:

int max = Math.Max(list.Max(elem => elem.Nr), list.Max(elem => elem.OtherNr));

2番目のアプローチ:

public int Max(List<Thing> list)
{
  int maxNr = 0;

  foreach (var elem in list)
  {
    if (elem.Nr > maxNr)
      maxNr = elem.Nr;
    if (elem.OtherNr > maxNr)
      maxNr = elem.OtherNr;
  }

  return maxNr;
}

3番目のアプローチは、両方の属性で並べ替えを実行してから、最初のエントリを取得して、どちらか一方のプロパティを取得することです。

これを行うための最速の方法を見つけたいと思います。したがって、すべてのアプローチの中で、私は2番目の投稿が好きです(パフォーマンスの観点から)。最初のものは短いですが、リストを2回確認する必要があります。

他の解決策はありますか?

4

2 に答える 2

10

3つ以上のプロパティが必要な場合にLINQを使用する代替ソリューション(これはの制限ですMath.Max):

int max = list
  .SelectMany(elem => new[]{ elem.Prop1, elem.Prop2, elem.Prop3 })
  .Max();
于 2012-12-11T08:28:59.560 に答える
9

もし、するなら

int max = list.Max(elem => Math.Max(elem.Nr, elem.OtherNr));

それはまだシングルライナーですが、リストを1回だけ繰り返します。手で書き出すことで効率がわずかに低下する可能性があるので、一線を引くと思います。

double(また、そこからintどこかにキャストする必要はありませんか?)

于 2012-12-11T08:14:16.140 に答える