0

ポイントを追加するために使用しているポイントのリストがあります。

私には2つのアプローチがありますが、どちらが優れているかを知りたいだけです。

以下は、最初のアプローチのコードです。

 List<Point> borderPoints = new List<Point>();

                Point p1 = new Point(0, 0);
                Point p2 = new Point(Width, 0);

                borderPoints.AddRange(new[] { p1, p2 });

2番目のアプローチでは、次のようなポイントを追加します。

 borderPoints.Add(p1);
 borderPoints.Add(p2);

ポイントを4回追加する必要があるので、どのアプローチに従うべきか、そしてその理由、またはそれは問題ではありません、それはスタイルの場合だけですか?

4

6 に答える 6

2

可能な場合は、必ず最初のものを選択してください。AddRangeすべてのシングルよりもはるかに高速に動作しますAdd。(リストのコレクションの増加によるリストのrsizeについて考えると、明らかになります)

于 2012-05-09T06:50:52.097 に答える
2

3番目のアプローチを使用します。

List<Point> borderPoints = new List<Point>(new Point[] {
    new Point(0, 0),
    new Point(Width, 0),
});
于 2012-05-09T06:51:11.487 に答える
1

あなたが正しいです。あなたの状況では、それはあなたのプログラミングスタイルのケースです。

Add()サイクルでシンプルで便利ですが AddRange()、一度に使用するとよりエレガントに見えます。

パフォーマンスについて考える:

AddRange()以前に作成したツリーノードの配列をコレクションにAdd()追加し、新しいツリーノードをコレクションに追加します(MSDNドキュメント)。

したがって、ノードを4つだけ追加する場合、またはノードを頻繁に追加しない場合は、を使用しAdd()ます。

于 2012-05-09T06:51:54.960 に答える
0

1)リストに追加するポイント数が事前にわかっている場合は、「capacity」パラメーターを指定してリストコンストラクターを使用します。

2)何度も使用しない限り、AddRangeにポイントを渡すためだけに新しい配列をインスタンス化するのは無駄です。

于 2012-05-09T06:52:01.563 に答える
0

AddRange範囲を使用し、単一のアイテムを使用する場合、答えは簡単ですAdd

しかし、あなたの場合、私はリストをまったく使用しません。私にとっては、BorderPointsと呼ばれる概念が欠けているようです。このようなもの:

public class BorderPoints {
    public BorderPoints(Point p1, Point p2) {
        _p1 = p1;
        _p2 = p2;
    }
}

Then you can just use that instead of the list.
于 2012-05-09T06:53:17.400 に答える
0

2番目のアプローチを使用します。

最初のアプローチでは、配列が不必要にインスタンス化されるため、非常に遅くなります。

AddRange追加するアイテムがすでにコレクション(または列挙)にある場合にのみ使用してください。

一般に、パフォーマンスの最後の1ナノ秒ごとに絞り込みたい場合は、リストの容量が、追加するすべてのアイテムに対して十分な大きさであることを確認することで、これを行うことができます。

var list = new List<T>(capacity);
... add items ...

また

list.Capacity = capacity;
... add items ...

ただし、リストに追加する前に個々のアイテムを配列にコピーしても、何も得られません。

于 2012-05-09T06:55:59.317 に答える