1

私は2つのfloat[]オブジェクトを持っています。for ループを記述せずに、2 つの 1D 配列を比較して、数値的に等しいかどうかを確認したいと考えています。

次のコードを実行すると (すべての要素が等しいため)、if ステートメントを通過せず、メッセージが表示されません。

Equalsコマンドを正しく機能させるには、どのように適用すればよいですか?
使用できる比較コマンドはありますか?

 Random r1 = new Random(1);
   int rndNumber= r1.Next(10);
   float[] m = Enumerable.Repeat((float)rndNumber, 180).ToArray();
   float[] m2 = Enumerable.Repeat((float)rndNumber, 180).ToArray();
   if (m.Equals(m2))
    {
    MessageBox.Show("we are equal");
   }
4

1 に答える 1

8

Equalメソッドは、(等しくない) オブジェクトの参照を比較するだけArrayの既定の実装からオーバーライドされません。object

シーケンス内の各要素の値を比較し、同じ内容が同じ順序で含まれていることを確認します。これを行うには、 in を使用SequenceEqualSystem.Linq.Enumerableます。

if(m.SequenceEqual(m2)) {...}

内部的には、そのメソッドは各シーケンスの各要素を繰り返し処理し、Equals各要素ペアを呼び出してそれらがすべて同じであることを確認します。これは確かに for ループよりも使いやすい(そして間違いなく読みやすい) ですが、ループを使用するよりも優れたパフォーマンスは得られないことに注意してforください。ループを隠しているだけです。

于 2012-11-14T22:13:29.537 に答える