2012-03-09 11 views
2

私はこのC#のコードを持っている:Javaは、C#の配列宣言のprivate static double [、] [] _temp = null;に相当します。

private static double[,][] _temp = null; 

私は私が今までそれにカンマを持つ配列の宣言を使用していたとは思いません。私はそれがギザギザの配列のいくつかのバリエーションだと仮定します。誰でもC#コードが何をしているかを確認できますか?また、誰もJavaの同等のコードが何であるか知っていますか?

+1

Re:Javaに相当:JavaはC/C++/C#の意味で真の多次元配列を持たないため、直接の同等物はありません。これをJavaに変換するには、 'double [] [] []'という三次元でギザギザにするか、2次元配列ラッパークラスを作成して '[i、j]'を'[i * numCols + j]'である。 – ruakh

答えて

1

2次元配列ですか?

private static double[][] temp = null; 

EDIT:

三次元:

private static double[][][] temp = null; 
+0

いいえ、その3次元 – Dani

+0

これは間違った答えである理由を説明してください。 –

+0

それは編集までだった – Dani

1

これは、固定サイズの2次元配列の配列になります。 配列の2次元配列 (ギザギザではなく)固定サイズです。

+2

ええと、私はそれを「2次元配列の配列」と言いますが、それは私です。 –

+0

@カーク - 正直言って、私はそれを書いたやり方が正しいことを完全には分かっていません。 –

+0

好奇心をそそらずに 'double [,,]'と同じではないでしょうか? – Danny

0

このsiteによれば、[]内のカンマC位において二次元配列を宣言するようなものです。あなたの場合、二次元配列の配列になります。

1

[,]は、長方形の配列です(ギザギザではありません)。 (そして1つのコンマで2次元)。通常のJava配列の配列(ギザギザになる可能性があります)よりもパフォーマンス上の利点があります。あなたは、2つのポインタを間接的に参照するのではなく、少しの算術演算と1つのポインタ逆参照を持つ要素を見つけることができます。小規模な配列に役立つかどうかは分かりませんが、大きな配列の場合は[,]がキャッシュのパフォーマンスを向上させるでしょう。アレイプロセッサを搭載したマシンでも大いに役立ちます。 (アレイプロセッサを搭載したマシンでは、配列を実際にうまく処理するため、FORTRANを使用する人もいます)。C#は、そのような小さなボーナスを得るために特別なものを追加する傾向があります。 Javaはコストがかかってもシンプルにしようとします。

次に、もう1つの[]は、Javaの場合と同様に、ギザギザのない配列のギザギザの配列を提供します。

+0

興味深い。私は膨大な量のデータを処理します。あなたが記述したパフォーマンス上の利点を持つクラスをJavaで作成することは可能ですか、それともより低いレベルでしか行えないことでしょうか? – adam0101

+0

@ adam0101:うーん。私はここで私の知識の限界にある程度います。ベクトルプロセッサーやグラフィックスプロセッシングユニットをお持ちの場合は、その角度からいくつかの研究をしたいかもしれません。さもなければ、Javaでは、WからHの配列を与えられた場合、一次元配列を使用し、(int、x、y)のインデックスをint i =(W * y)+ xとして計算します。 (2のべき乗の次元はあなたの計算を速くします)。少し実験します。もう一つのこと:仮想マシンはオンザフライで最適化されているので、自分が何をするのかは関係ありません。彼らはあなたのためにこのすべての仕事をし、それをより良くするかもしれません。また、あなたのガベージコレクタを甘やかす。 – RalphChapin

関連する問題