複合演算子
複合演算子を使用して、配列、マップまたは構造体内の要素にアクセスします。複雑な演算子は詳細モードでのみ使用できます。
次の表に、複合演算子の一覧を示します。
演算子 | 意味 |
---|
[ ] | 添字演算子。 添字演算子は、配列またはマップで使用します。 - - 配列で添字演算子を使用し、1つ以上の要素にアクセスします。
- - マップで添字演算子を使用し、キーと値のペアの特定のキーに対応する値にアクセスします。
|
. | ドット演算子。 ドット演算子は、構造体または構造体の配列で使用します。 - - 構造体でドット演算子を使用し、要素にアクセスします。
- - 構造体の配列でドット演算子を使用し、各構造体の要素にアクセスします。演算子は、各構造体内の同じ名前の要素を配列として返します。
|
ネストされた階層にアクセスするには、複合演算子を組み合わせて使用できます。
添字演算子(配列)
添字演算子を使用して、配列内の要素にアクセスします。特定の要素または要素の範囲にアクセスできます。
構文
配列の特定の要素にアクセスするには、次の構文を使用します。
array[ index ]
配列の要素の範囲にアクセスするには、次の構文を使用します。
array[ start_index , end_index ]
以下の表に、構文の引数を示します。
引数 | 説明 |
---|
array | 配列データ型。アクセスする1つ以上の要素が含まれる配列。 配列を求める有効な式を必要に応じて入力できます。 |
index | 整数データ型。アクセスする要素の位置。例えば、インデックス0は配列の最初の要素を示します。 |
start_index | 整数データ型。アクセスする要素の範囲の開始インデックス。添字演算子には、開始インデックスが表す要素が含まれます。 |
end_index | 整数データ型。アクセスする要素の範囲の終了インデックス。添字演算子は、終了インデックスが表す要素を除外します。 |
整数値を返すインデックス式を使用できます。式が負の値を返す場合、インデックスは0であると見なされます。
指定したインデックスが配列のサイズから1引いた値よりも大きい場合、インデックスは配列の最後の要素にアクセスします。
戻り値
配列の要素。戻り値の型は、要素のデータ型と同じです。
[i, j]のようにカンマで区切られた2つのインデックスを指定した場合、この式はiからj-1までの要素の配列を返します。iがjまたは配列のサイズより大きい場合、式は空の配列を返します。
次の状況ではNULLです。
- •インデックスが配列のサイズより大きい。
- •インデックスはNULLである。
- •[i,j]のように複数の添字を指定し、iとjのいずれかがNULLである。
- •配列がNULLである。
例
次の文字列配列があります。
drinks = [‘milk’, ‘coffee’, ‘tea’, ‘chai’]
次の式では、添字演算子を使用して配列の文字列要素にアクセスします。
Input Value | RETURN VALUE |
---|
drinks[0] | 'milk' |
drinks[2] | 'tea' |
drinks[NULL] | NULL |
drinks[1,3] | ['coffee','tea'] |
drinks[2,NULL] | NULL |
drinks[3,1] | [ ] |
添字演算子(マップ)
添字演算子を使用し、キーと値のペアの特定のキーに対応する値にアクセスします。
構文
マップ内の特定のキーに対応する値にアクセスするには、次の構文を使用します。
map[ key ]
以下の表に、構文の引数を示します。
引数 | 説明 |
---|
map | Mapデータ型。キーに対応する値を取得するマップ。 |
key | キーのデータ型。値を取得するキー要素。 マップデータのキー値を求める有効な式を入力できます。 |
戻り値
マップ内のキーに関連付けられている値。戻り値の型は、値のデータ型と同じです。
キーがマップに存在しない場合はNULL。
例
次のマップがあります。
country_currency = [‘England’ -> ‘Pound’, ‘France’ -> ‘Euro’, ‘Japan’ -> ‘Yen’>, ‘USA’ -> ‘Dollar’]
次の式では、添字演算子を使用してマップの値にアクセスします。
Input Value | RETURN VALUE |
---|
country_currency [‘Japan’] | ‘Yen’ |
country_currency [‘India’] | NULL |
country_currency [‘England’] | ‘Pound’ |
ドット演算子(構造体)
ドット演算子を使用して、構造体の要素にアクセスします。
構文
構造の要素にアクセスするには、次の構文を使用します。
struct.element
以下の表に、構文の引数を示します。
引数 | 説明 |
---|
struct | Structデータ型。アクセスする要素が含まれる構造体。 構造を求める有効なトランスフォーメーション式を必要に応じて入力できます。 |
element | アクセスする構造体要素の名前。 |
戻り値
構造体の要素。戻り値の型は、要素のデータ型と同じです。
次の状況ではNULLです。
- •構造体の要素にNULL値がある。
- •構造体がNULLである。
例
次のような構造があるとします。
location{
street: NULL
city : 'NEWYORK'
state: 'NY'
zip : 12345
}
次の式では、ドット演算子を使用して構造の要素にアクセスします。
Input Value | RETURN VALUE |
---|
location.street | NULL |
location.city | 'NEWYORK' |
location.state | 'NY' |
location.zip | 12345 |
ドット演算子(構造体の配列)
構造体の配列でドット演算子を使用して、配列内の各構造体の要素にアクセスします。
構文
構造の配列の要素にアクセスするには、次の構文を使用します。
array_of_structs.element
以下の表に、構文の引数を示します。
引数 | 説明 |
---|
array_of_structs | 配列データ型。アクセスする各構造体の要素が含まれる構造体の配列。 配列を求める有効なトランスフォーメーション式を必要に応じて入力できます。 |
element | アクセスする構造体要素の名前。 |
戻り値
各構造体から指定された要素を含む配列。
次の状況ではNULLです。
- •構造体の要素にNULL値がある。
- •構造体がNULLである。
例
3つの構造体要素を持つ次の配列があり、各構造体に3つの要素があります。
employee_info_array = [
derrick_struct{
name: 'Derrick'
city: NULL
state: 'NY'
},
kevin_struct{
name: 'Kevin'
city: 'Redwood City'
state: 'CA'
},
lauren_struct{
name: 'Lauren'
city: 'Woodcliff Lake'
state: NULL
}
]
次の式では、ドット演算子を使用して配列の各構造体の要素にアクセスします。
Input Value | RETURN VALUE |
---|
employee_info_array.name | ['Derrick','Kevin','Lauren'] |
employee_info_array.city | [NULL,'Redwood City','Woodcliff Lake'] |
employee_info_array.state | ['NY','CA',NULL] |
ネストされた階層の復号演算子
ネストされた階層には、構造体の配列などの階層データも含む要素が含まれます。ネストされた階層の要素にアクセスするには、複合演算子を組み合わせて使用します。
次のタイプのネストされた階層の要素にアクセスできます。
- •多次元配列
- •構造体の配列
- •配列要素を持つ構造体
- •ネストされた構造体
多次元配列
多次元配列は配列の配列です。添字演算子を使用して、最も内側のレベルにある配列のプリミティブ要素にアクセスできます。添字演算子を使用して、任意のレベルの配列にアクセスできます。
添字演算子を使用して、次の値を返すことができます。
- •最も内側のレベルにある配列内のプリミティブ要素。
- •任意のレベルにある1つ以上の配列。
- •任意のレベルにある1つ以上の配列のサブセット。
最も内側のレベルにある配列のプリミティブ要素にアクセスするには、複数の添字演算子を使用します。多次元配列の次元数によって、使用する添字演算子の数が決まります。各添字演算子には1つのインデックス値を含める必要があります。戻り値のデータ型は、配列のプリミティブ要素のデータ型と同じです。
例えば、2次元配列では2つの添字演算子を使用します。最初の添字演算子は親配列にアクセスします。2番目の添字演算子は、親配列内の子配列にアクセスします。
例
3つの子配列を含み、各子配列に文字列要素が含まれる次の2次元の親配列を考えてみます。
menu_array = [
['milk','coffee','tea','chai'],
['ham','turkey',NULL],
['caesar','cobb','greek','chipotle']
]
添字演算子を使用して、次のタイプの要素にアクセスできます。
- プリミティブ要素
次の式では、2つの添字演算子を使用して、親配列menu_array内の各子配列の特定文字列要素にアクセスします。
Input Value | RETURN VALUE |
---|
menu_array[0][1] | 'coffee' |
menu_array[2][3] | 'chipotle' |
menu_array[1][2] | NULL |
- 配列要素
次の式では、単一の添字演算子を使用して、親配列menu_array内の子配列にアクセスします。
Input Value | RETURN VALUE |
---|
menu_array[0] | ['milk','coffee','tea','chai'] |
|
menu_array[0,2] | [ ['milk','coffee','tea','chai'], ['ham','turkey',NULL] ] |
menu_array[1,0] | [ ] |
menu_array[NULL,2] | NULL |
- 配列要素のサブセット
次の式では、2つの添字演算子を使用して、親配列menu_array内の子配列のサブセットにアクセスします。
Input Value | RETURN VALUE |
---|
menu_array[0][0,2] | ['milk','coffee'] |
menu_array[2][0,3] | ['caesar','cobb','greek'] |
menu_array[0,2][0,3] | [ ['milk','coffee','tea'], ['ham','turkey',NULL] ] |
構造体の配列
構造体の配列は構造体要素を持つ配列です。添字演算子とドット演算子の組み合わせを使用して、子構造体と子構造体の要素にアクセスします。
親配列内の子構造体の要素にアクセスするには、添字演算子の後にドット演算子を使用します。戻り値を変更せずに、演算子の順序を反転することもできます。
例
次のような構造体employee_info_arrayの配列があります。
employee_info_array = [
derrick_struct{
name: 'Derrick'
city: NULL
state: 'NY'
},
kevin_struct{
name: 'Kevin'
city: 'Redwood City'
state: 'CA'
},
lauren_struct{
name: 'Lauren'
city: 'Woodcliff Lake'
state: NULL
}
]
次のいずれかの順序で複合演算子を使用して、いずれかの子構造体の要素にアクセスできます。
- 添字演算子を使用してから、ドット演算子を使用する。
演算子は、次の順序で構造体の配列にアクセスします。
- 1添字演算子が配列内のインデックス付き要素にアクセスし、構造体を返します。
- 2ドット演算子が構造体内の要素にアクセスします。
例えば、次の式では、添字演算子とその後にドット演算子を使用して、配列employee_info_arrayの要素にアクセスします。
Input Value | RETURN VALUE |
---|
employee_info_array[0].name | 'Derrick' |
employee_info_array[1].city | 'Redwood City' |
employee_info_array[2].state | NULL |
- ドット演算子を使用してから、添字演算子を使用する。
演算子は、次の順序で構造体の配列にアクセスします。
- 1ドット演算子は、各構造体から同じ名前の要素を検索し、配列を返します。
- 2添字演算子が配列内のインデックス付き要素にアクセスします。
例えば、次の式は、ドット演算子を使用して配列employee_info_arrayの要素にアクセスする場合の戻り値を示しています。
Input Value | RETURN VALUE |
---|
employee_info_array.name | ['Derrick','Kevin','Lauren'] |
employee_info_array.city | [NULL,'Redwood City','Woodcliff Lake'] |
employee_info_array.state | ['NY','CA',NULL] |
次の式は、ドット演算子とその後に添字演算子を使用して配列employee_info_arrayの要素にアクセスする場合の戻り値を示しています。
Input Value | RETURN VALUE |
---|
employee_info_array.name[0] | 'Derrick' |
employee_info_array.city[1] | 'Redwood City' |
employee_info_array.state[2] | NULL |
添字演算子とドット演算子のどちらを先に使用しても戻り値が同じであることに注意してください。例えば、式employee_info_array[0].nameとemployee_info_array.name[0]の戻り値は同じ'Derrick'です。
配列要素を持つ構造体
構造体内にある配列の要素にアクセスするには、ドット演算子の後に添字演算子を使用します。ドット演算子が先に構造体の指定した配列にアクセスします。次に、添字演算子がインデックス値に基づいて配列の要素にアクセスします。
例
配列drinks、sandwiches、saladsを持つ次の構造体があります。
menu_struct{
drinks: ['milk','coffee','tea','chai']
sandwiches: ['ham','turkey',NULL]
salads: ['caesar','cobb','greek','chipotle']
}
式menu_struct.drinks[0]を使用する場合、演算子は次の順序で親構造体と子配列にアクセスします。
- 1ドット演算子は、配列drinksにアクセスします。
- 2添字演算子が配列drinks: ['milk','coffee','tea','chai']の位置0にある値にアクセスし、'milk’を返します。
次の式は、ドット演算子とその後に添字演算子を使用して、親構造体menu_structの子配列の値にアクセスするその他の例を示しています。
Input Value | RETURN VALUE |
---|
menu_struct.drinks[1] | 'coffee' |
menu_struct.sandwiches[2] | NULL |
menu_struct.salads[3] | 'chipotle' |
menu_struct.drinks[0,3] | ['milk','coffee','tea']
|
ネストされた構造体
ネストされた構造体は、1つ以上のレベルの構造を含む構造体です。ドット演算子を使用して、最も内側のレベルにある構造体のプリミティブ要素にアクセスできます。ドット演算子を使用して、任意のレベルの構造体にアクセスすることもできます。
ドット演算子を使用して、次の値を返すことができます。
- •最も内側のレベルにある構造体のプリミティブ要素。
- •任意のレベルにある1つ以上の構造。
最も内側のレベルにある構造体のプリミティブ要素にアクセスするには、複数のドット演算子を使用します。ネストされた構造体のレベル数によって、使用するドット演算子の数が決まります。戻り値のデータ型は、構造体の要素のデータ型と同じです。
例えば、2つのレベルの構造体を持つネストされた構造体では2つのドット演算子を使用します。最初のドット演算子は、親構造体にアクセスして子構造体を見つけます。次に、2番目のドット演算子が子構造体にアクセスして、子構造体の特定のプリミティブ要素を返します。
例
2つの子構造体home_address_infoおよびdepartment_infoを含む、次の構造employee_info_structがあります。
employee_info_struct{
emp_name: 'Derrick'
home_address_info{
city: 'New York'
state: NULL
department_info{
NULL
}
}
次の式では、ドット演算子を使用して、構造体employee_info_structから値にアクセスします。
Input Value | RETURN VALUE |
---|
employee_info_struct.emp_name | 'Derrick' |
employee_info_struct.home_address_info | { city: 'New York' state: NULL } |
employee_info_struct.department_info | NULL |
employee_info_struct.home_address_info.city | 'New York' |
employee_info_struct.home_address_info.state | NULL |