2011-01-14 8 views
0

私は答えを見つけようとしましたが、ゼロ以外のインデックスで始まる配列を実現する方法の答えがありました。このようパスカルなどの一部の言語では、デフォルトでこれを提供し、例えば、私は常に思ってきた0以外のインデックスで始まる配列の目的は何ですか?

var foobar: array[1..10] of string; 

ような配列を作成することができますなぜあなたは0で起動しない配列インデックスを持ちたいでしょうか?

初心者が1から始まり、最後のインデックスが配列のサイズであることはよく知られているかもしれませんが、長期的には、0から始まる値に慣れるべきです。

私が考えることのできる別の目的:場合によっては、インデックスは実際にはそれぞれの配列エントリに含まれているものを表すことができます。たとえば、大文字をすべて配列に入れたい場合は、それぞれの文字のASCIIコードをインデックスにすると便利です。しかし、ちょうど一定値を減算するのはかなり簡単です。また

#define ASCII_SHIFT 65 
main() 
{ 
    int capital_letters[26]; 
    int i; 
    for (i=0; i<26; i++){ 
     capital_letters[i] = i+ASCII_SHIFT; 
    } 
    printf("%c\n", capital_letters[67-ASCII_SHIFT]); 
} 

、私はあなたがしたい場合は、ハッシュテーブルを使うべきだと思う:この例では、(Cで)単純にすべて大文字を取得し、ASCIIコード67と手紙にアクセスします。このような何かを行うことができます何らかの種類のキーでエントリにアクセスする。

誰かがレトルトする可能性があります:インデックスが常に0で始まるのはなぜですか?まあ、これはずっと簡単です。配列を宣言するときに1つのインデックスを入力するだけで、より高速に処理できます。また、最初のエントリが配列[0]であり、最後のエントリが配列[length_of_array-1]であることが常に確認できます。他のデータ構造も0から始まるのが一般的です。たとえば、バイナリファイルを読み込んだ場合は、最初のバイトではなく0バイト目から始めます。

なぜ、いくつかのプログラミング言語がこの「機能」を持っているのですが、C/C++などの言語でこれを達成する方法を尋ねる人々がいる理由は、非ゼロのインデックスで始まる配列は、有用であるか、あるいは、何かを0から始まる配列で単純に行うことはできません。

+0

あなたが推測しているように、私は配列が初心者にはもっと理解しやすいと思っています。 – Krule

+1

古いことわざ:「あなたは決して持っていなかったこと、あなたは決して逃さない」。非ゼロベースのインデックスは、多くの用途を持っています(単に「初心者向け」ではありません)。 Cは低レベルの言語であり、効率を考慮して設計されているため、0ベースの配列インデックスの制限があります。より高いレベルの言語はこの制約を心配する必要はありません。 MATLABが1ベースの配列インデックスのみをサポートしているという事実を考えてみてください。 –

+0

ゼロベースの配列を使ってすべてを行うことができるというメリットは、すべてがマシンコードで実行できることです。 – Apalala

答えて

2

インデックスが何かを意味する場合、データベースなどからのIDは、有用です。

ああ、配列を必要とする他のコードと一緒に使用するため、ハッシュを使用することはできません。

たとえば、Railsチェックボックス。それらは配列としてWebフォームから渡されますが、私のコードでは、udnerlyingデータベースオブジェクトにアクセスしたいと思います。配列のインデックスはid、et voilaです!

0

非ゼロベースの配列は、整数ではない順序インデックスを持つ配列の自然な拡張です。

var 
    letter_count : array['a'..'z'] of integer; 

または::

type 
    flags = (GREEN, YELOW, RED); 
var 
    flags_seen = array[flags] of boolean; 

古典的には負のインデックスを持つ配列である:

zero_centered_grid = array[-N..N,-N..N] of sometype; 

アイデアがあることである:

    パスカルでは次のような配列を持つことができます
  • 多くのインデックスエラーは、コンパイル時に検出されます。インデックスの宣言はより具体的です。
  • いくつかのアルゴリズム(ヒープが頭に浮かぶ)は、最小インデックスがゼロとは異なる場合に、よりクリーンな実装をしています。唯一のゼロベースのアレイと

言語は、後者のために明確に定義されたイディオムを使用し、残りの辞書/マップの効率的な実装を有します。

関連する問題