0

内部に配列を持つクラスが必要です:

class FirstClass
{
     int x = 0;
     int y = 0;
}

class SecondClass
{
    FirstClass[] firstclass = ???????? // size of array is unknown
    OtherClass[][] otherclass = ???????? // i need also multidimensional array or array of arrays
}

通常List<>、このような目的で使用していますが、今日は可能な限り最速のソリューション(処理するデータが多い)が必要であり、配列はリストよりも高速である必要があると思います(リストは配列よりもはるかに遅いとどこかで読んだことがあります)。

問題は、「????????」に何を入れるかです。私のコードで?

編集:

私のクラスはニューラル ネットワーク オブジェクトです。最大の配列には学習データが含まれます (50 以上のフィールドを持つ 100000 以上のデータ行、float または double データ型)。

Array が List よりも 1% 速い場合は、Array が必要です。

4

5 に答える 5

2

正確なサイズがわかるまで配列を作成することはできません。リストとは異なり、配列は*拡張できません。サイズを指定すると、そのサイズが永久に保持されます。処理する配列が必要な場合は、最初に作成して入力し、メソッドList<T>を使用して配列に変換します。ToArray()

var firstClassList = new List<FirstClass>();
firtstClassList.Add(new FirstClass(123));
firtstClassList.Add(new FirstClass(456));
FirstClass firstClass[] = firtstClassList.ToArray();

var otherClassList = new List<List<OtherClass>>();
otherClassList.Add(new List<OtherClass>());
otherClassList[0].Add(OtherClass(10));
otherClassList[0].Add(OtherClass(11));
otherClassList.Add(new List<OtherClass>());
otherClassList[1].Add(OtherClass(20));
otherClassList[1].Add(OtherClass(21));
otherClassList[1].Add(OtherClass(22));
OtherClass otherClass[][] = otherClassList.Select(r => r.ToArray()).ToArray();

ただし、これは時期尚早の最適化であることに注意してください。リストは配列と同じくらい高速ですが、柔軟性がはるかに高くなります。リストを配列に置き換えることは、少なくともプロファイリングする前では意味がありません。


*配列のサイズを変更するための の呼び出しはArray.Resize、配列の「拡張」としてカウントされません。これは、別の配列インスタンスが作成され、「拡張」しようとしていたインスタンスがコピーされた直後に破棄されるためです。

于 2013-01-03T20:15:58.037 に答える
1

配列のサイズがわからない場合は、List<FirstClass>前述の a や ArrayList など、別のタイプのコレクションの使用を検討することをお勧めします。

パフォーマンスに関しては、データを実際にテストするまでは、List を使用しても問題ないかもしれません。それでも問題やボトルネックがある場合は、配列またはより効率的な構造を使用することを検討してください。(非常に大規模なデータ セットを使用しない限り、実行時間に大きな違いはありません。)

(リストを配列に変換するオプションも常にあります。)

于 2013-01-03T20:16:08.790 に答える
1

配列がリストよりも速いのはなぜですか? 実行時間の比較については、この質問を参照してください。

私が考えることができる唯一のケースは、要素を検索する必要があり、バイナリ検索を実行できるように配列がソートされている場合です。ただし、[] を使用して C# の List<T> にインデックスを付けることができるため、これは議論の余地があります。

于 2013-01-03T20:16:14.787 に答える
0
var list = new List<FirstClass>();
list.Add(object);

FirstClass[] firstClass = list.ToArray();

var listOfLists = new List<List<SecondClass>>();
var item1 = new List<SecondClass>();
item1.Add(anotherObject);
listOfLists.Add(item1);

SecondClass[][] secondClass = listsOfLists.Select(i => i.ToArray()).ToArray();
于 2013-01-03T20:21:21.523 に答える
-5

次のようにインスタンス化できます。

FirstClass[] firstclass = new FirstClass[];
OtherClass[][] otherclass = new OtherClass[][];

そして、要素を追加する必要があるときはいつでも Add メソッドを使用します。

firstclass.Add(new FirstClass());
于 2013-01-03T20:22:48.967 に答える