No.3ベストアンサー
- 回答日時:
何故Listを使いたくないのでしょうか?
これによって対処が随分変わります。
Object型になるのが嫌であればジェネリクスのList型もあります。
■List<T> クラス
https://msdn.microsoft.com/ja-jp/library/6sh2ey1 …
またパフォーマンス面であればArrayのResizeはするべきではありません。
新規の配列を確保して全データのコピーが行われるため大変重いです。
■ArrayクラスResizeの内部処理
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
public static void Resize<T>(ref T[] array, int newSize) {
if (newSize < 0)
throw new ArgumentOutOfRangeException("newSize", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
Contract.Ensures(Contract.ValueAtReturn(out array) != null);
Contract.Ensures(Contract.ValueAtReturn(out array).Length == newSize);
Contract.EndContractBlock();
T[] larray = array;
if (larray == null) {
array = new T[newSize];
return;
}
if (larray.Length != newSize) {
T[] newArray = new T[newSize];
Array.Copy(larray, 0, newArray, 0, larray.Length > newSize? newSize : larray.Length);
array = newArray;
}
}
またポインタで実装するにしても単純な配列であれば、連続してメモリ上に確保できないためリサイズした時にコピーが必要になります。
コピー不要なリサイズ可能な配列な様なものを実装するとなるとリスト構造を自分で作ることになります。
.NETのList配列は10年以上の時間をかけてとてもよく練り上げられたソースになっています。
それ以上のパフォーマンスを出す事はとても難しいでしょう。
もちろん、Listであればジャグ配列ならぬジャグリストになるところを最初から二次元リストとして実装できるのでそこの部分は有利であり、Listよりパフォーマンスをよくする事が全く不可能とは言いませんがとても難しい事です。
ただ、そこまでパフォーマンスを考えるのであれば、固定長の配列になるように仕様を変えてしまった方が良いでしょう。
また、何らかの理由で二次元配列しか受け取らないメソッドを呼び出すのであれば、ListのToArrayメソッドを利用するとよいでしょう。
長さの変わる間はList型で動かし、確定した時点で配列に変換する事で、長さが変わる度にコピーしていたものが1度のみのコピーで済ませられます。
最後に…もし…パラメータの配列長等に合わせて配列を定義したいのであれば以下の様な事も可能です。
double[,] sample = new double[param1.Length,param2.Length]
No.2
- 回答日時:
No.1
- 回答日時:
ポインタについては勉強不足でわかりませんけど、Listクラスを使いたくないという事はArrayListもダメという事でしょうか?
まぁ、この場合やろうとしてるのは2次元配列ではなく『配列の配列』ですけれど。
たまにExcelでやっているもので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
2次元配列を戻り値とする関数?
C言語・C++・C#
-
-
4
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
5
C#にて別クラスの関数を使いたい
C言語・C++・C#
-
6
C#でほかのファイルにある自作クラスを使用したい場合
その他(プログラミング・Web制作)
-
7
C#で構造体の配列を持った構造体を使いたいのですが
C言語・C++・C#
-
8
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
9
C# インスタンスの破棄
その他(プログラミング・Web制作)
-
10
大量のデータを読み込んで表示する速度を改善したい
C言語・C++・C#
-
11
System.IO.Directory.GetFilesの順番
Visual Basic(VBA)
-
12
C#でExcelのシートを選択する方法
その他(プログラミング・Web制作)
-
13
DataTableに入っているデータを全てinsertしたい!(C#)
Microsoft ASP
-
14
C#において、同じインスタンスを何度もnewしてよいでしょうか。
その他(プログラミング・Web制作)
-
15
ColorをRGBで指定する方法
Visual Basic(VBA)
-
16
DataGridViewのセル編集完了後に値を設定するには
Visual Basic(VBA)
-
17
DataGridViewの各セル幅を自由に決め、その幅で固定したい
Visual Basic(VBA)
-
18
メッセージボックスを大きくする方法
Visual Basic(VBA)
-
19
C#でstringをポインタとして渡す
C言語・C++・C#
-
20
.NETアプリを作ったときの .manifest ファイルって必要なの
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列で格納したものをmsgboxで...
-
配列を使わずに、変数名を動的...
-
C言語 配列の長さの上限
-
メモリの初期値
-
複数の選択範囲の行番号を個別...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
2次元配列を戻り値とする関数?
-
VB.NET 構造体の配列の検索機能...
-
ExcelVBAで質問です。離れた二...
-
VB.netでRadioButtonを配列にし...
-
配列同士の文字列の比較
-
C# Listを使わずに2次元配列の...
-
ポインタの配列のコンマについて
-
FORTRAN77の配列(除算)
-
擬似コード 長さがmの配列でな...
-
MIPSアセンブリ言語で配列を宣...
-
先頭アドレスとは何ですか?
-
【C言語】配列の中に配列を入れ...
-
構造体配列を引数とするDLL作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列の参照渡しで型が一致しま...
-
配列を使わずに、変数名を動的...
-
VBで構造体の配列を関数に渡す...
-
配列で格納したものをmsgboxで...
-
unsigned char配列への入力の仕方
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
擬似コード 長さがmの配列でな...
-
【速いブラインドタッチ】手を...
-
パイソンの
-
C言語初心者 ポインタについて...
-
ExcelVBAで質問です。離れた二...
-
配列を含む構造体の初期値について
-
複数の選択範囲の行番号を個別...
-
Functionの戻り値を2次元配列...
-
C++ vectorに配列をプッシュしたい
-
先頭アドレスとは何ですか?
-
テキストファイルから文字列を...
-
Redimした動的配列はEraseする...
おすすめ情報