以前、配列とリストの違いは何ですか? でこの質問をしようとしました。しかし、私の質問は最終的な答えに到達する前に閉じられました(それについての詳細)。
コンピュータ サイエンスにおける「配列」という言葉の本当の意味を理解しようとしています。私は、このウェブサイトの精神に従って議論するのではなく、答えに到達しようとしています. 私が求めているのは言語にとらわれませんが、使用したさまざまな言語での配列の知識を利用できます。
この質問に対する考え方:
- 新しいプログラミング言語を設計していて、それに配列を実装することにしたと想像してください。それは彼らが何を意味するのですか?それらのものの特性と能力はどうなるでしょうか。言語の種類によるとしたら、どうしてですか?
- 配列を配列にするものは何ですか?
- 配列が配列でないのはいつですか? たとえば、リスト、ベクター、テーブル、マップ、またはコレクションの場合は?
配列が何であるかについての正確な定義が1つもない可能性があります。その場合、標準または標準に近い仮定、または配列とは何ですか? 少なくとも共通の領域はありますか?いくつかの定義があるかもしれませんが、その場合は、それぞれで最も精度の高いものを探しています。
言語の例:
(これらのいずれかで間違っている場合は修正してください)。
- C 配列は、ポインター演算を使用してトラバースしたり、特定のオフセット ポイントでアクセスしたりできる、1 つの型のメモリの連続ブロックです。サイズは固定されています。
- JavaScript、Ruby、および PHP の配列は、可変サイズであり、任意の型のオブジェクト/スカラーを格納できます。また、拡張したり、要素を削除したりできます。
- PHP 配列には、数値と連想の 2 つのタイプがあります。連想配列には、文字列キーで格納および取得される要素があります。数値配列には、整数で格納および取得される要素があります。興味深いことに、あなたが持っていて
$eg = array('a', 'b', 'c')
、あなたunset($eg[1])
がまだ で取得'c'
している場合$eg[2]
、今だけ$eg[1]
未定義です。array_values()
(配列のインデックスを再作成するために呼び出すことができます)。文字列キーと整数キーを混在させることもできます。
この段階では、C 配列がここで唯一の真の配列であり、配列が配列であるために厳密に言えば、最初の箇条書きで述べたすべての特性を備えている必要があると疑っています。もしそうなら — 繰り返しますが、これらは私が確認または拒否した疑いです — JS と Ruby の配列は実際にはベクトルであり、PHP 配列はおそらくある種のテーブルです。
最後の注意: 私はこのコミュニティ wiki を作成したので、コメントの代わりに回答を数回編集する必要がある場合は、それを行ってください。ここではコンセンサスが整っています。