Collection
Collectionクラスは コレクション 型の変数を扱います。
コレクションは次のように初期化します:
New collection {( ...value : any )} : Collection 空の、あるいは値の入 った新規コレクションを作成し、その参照を返します |
New shared collection {( ...value : any )} : Collection 空の、あるいは値の入った新規の共有コレクションを作成し、その参照を返します |
例題
var $colVar : Collection // コレクション型の 4D変数の宣言
$colVar:=New collection // コレクションの初期化と 4D変数への代入
概要
New collection
New collection {( ...value : any )} : Collection
引数 | タイプ | 説明 | |
---|---|---|---|
value | Number, Text, Date, Time, Boolean, Object, Collection, Picture, Pointer | -> | コレクションの値 |
戻り値 | Collection | <- | 新規のコレクション |
|
説明
New collection
コマンドは、 空の、あるいは値の入った新規コレクションを作成し、その参照を返します 。
引数を渡さなかった場合、New collection
は空のコレクションを作成し、その参照を返します。
返された参照は、コレクション型の 4D変数に代入する必要があります。
var : Collection
やC_COLLECTION
ステートメントはコレクション型の変数を宣言しますが、コレクション自体は作成しないという点に注意してください。
任意で、一つ以上の value 引数を渡すことで、あらかじめ値の入った新しいコレクションを作成することができます。
ま たは、あとから代入によって要素を一つずつ追加・編集していくことができます。 例:
myCol[10]:="My new element"
コレクションの最終要素を超える要素番号 (インデックス) を指定した場合、コレクションは自動的にリサイズされ、合い間の要素にはすべて null 値が割り当てられらます。
サポートされている型 (数値、テキスト、日付、ピクチャー、ポインター、オブジェクト、コレクション等) であれば、個数に制限なく値を渡すことができます。 配列とは異なり、コレクションでは異なる型のデータを混ぜることができます。
ただし以下の変換問題については注意する必要があります:
- 渡されたポインターは、そのまま保存されます。ポインターは
JSON Stringify
コマンドを使用することで評価さ れます。 - 日付は、"dates inside objects" データベース設定に応じて、"yyyy-mm-dd" という日付、または "YYYY-MM-DDTHH:mm:ss.SSSZ" というフォーマットの文字列で保存されます。 コレクションに保存する前に 4D日付をテキストに変換した場合、プログラムはデフォルトでローカルのタイムゾーンを使用します。 このふるまいは
SET DATABASE PARAMETER
コマンドでDates inside objects
セレクターを使用することで変更可能です。 - 時間を渡した場合、それはミリ秒の数 (実数) として保存されます。
例題 1
新しい空のコレクションを作成し、それを 4Dコレクション変数に代入します:
var $myCol : Collection
$myCol:=New collection
// $myCol=[]
例題 2
あらかじめ値の入ったコレクションを作成します:
var $filledColl : Collection
$filledColl:=New collection(33;"mike";"november";->myPtr;Current date)
// $filledColl=[33,"mike","november","->myPtr","2017-03-28T22:00:00.000Z"]
例題 3
新しいコレクションを作成し、そこに新しい要素を追加します:
var $coll : Collection
$coll:=New collection("a";"b";"c")
// $coll=["a","b","c"]
$coll[9]:="z" // 値 "z" を10番目の要素として追加します
$vcolSize:=$coll.length // 10
// $coll=["a","b","c",null,null,null,null,null,null,"z"]
New shared collection
履歴
リリース | 内容 |
---|---|
v16 R6 | 追加 |
New shared collection {( ...value : any )} : Collection
引数 | タイプ | 説明 | |
---|---|---|---|
value | Number, Text, Date, Time, Boolean, Shared object, Shared collection | -> | 共有コレクションの値 |
戻り値 | Collection | <- | 新規の共有コレクション |
|
説明
New shared collection
コマンドは、 空の、あるいは値の入った新規の共有コレクションを作成し、その参照を返します 。
このコレクションに要素を追加する場合には Use...End use
構造でくくる必要があり、そうしない場合にはエラーが返されます。ただし、push()
や map()
などの関数を使用して要素を追加する場合は、自動で内部的に Use...End use が使用されるため、必要ありません。 ただし、属性の読み取りは Use...End use
構造の外側でも可能です。
共有コレクションについての詳細は、共有オブジェクトと共有コレクション のページを参照してください。
引数を渡さない場合、New shared collection
は空のコレクションを作成し、その参照を返します。
返された参照は、コレクション型の 4D変数に代入する必要があります。
var : Collection
やC_COLLECTION
ステートメントはコレクション型の変数を宣言しますが、コレクション自体は作成しないという点に注意してください。
任意で、一つ以上の value 引数を渡すことで、あらかじめ値の入った新しい共有コレクションを作成することができます。 または、あとからオブジェクト記法による代入で要素を一つずつ追加・編集していくことができます (例題参照)。
共有コレクションの最終要素を超える要素番号 (インデックス) を指 定した場合、共有コレクションは自動的にリサイズされ、合い間の要素にはすべて null 値が割り当てられらます。
以下のサポートされる型であれば、いくつでも値を渡すことができます:
- 数値 (実数、倍長整数...)。 数値は常に実数として保存されます。
- テキスト
- ブール
- 日付
- 時間 (ミリ秒の数 (実数) として保存されます)。
- null
- 共有オブジェクト(*)
- 共有コレクション(*)
標準のコレクション (非共有コレクション) とは異なり、共有コレクションはピクチャーやポインター、共有でないオブジェクトおよびコレクションはサポートしていません。
(*) 共有オブジェクトおよびコレクションが共有コレクションに追加された場合、それらは同じ ロック識別子 を共有します。 この点についてのより詳細は、4D Doc Center を参照ください。
例題
$mySharedCol:=New shared collection("alpha";"omega")
Use($mySharedCol)
$mySharedCol[1]:="beta"
End use
.at()
履歴
リリース | 内容 |
---|---|
20 | 追加 |
.at( index : Integer ) : any
引数 | タイプ | 説明 | |
---|---|---|---|
index | Integer | -> | 取得する要素のインデックス |
戻り値 | any | <- | そのインデックスにある要素 |
|
説明
.at()
関数は、 index の位置にある要素を返します (index は正負の整数)。
このコマンドは、元のコレクションを変更しません。
負の整数が渡された場合、コレクションの最後の要素から逆向きに数えます。
index がコレクションの範囲を超える場合、この関数は Undefined を返します。
例題
var $col : Collection
$col:=New collection(10; 20; 30; 40; 50)
$element:=$col.at(0) // 10
$element:=$col.at(1) // 20
$element:=$col.at(-1) // 50
$element:=$col.at(-2) // 40
$element:=$col.at(10) // undefined
.average()
履歴
リリース | 内容 |
---|---|
v16 R6 | 追加 |
.average( {propertyPath : Text } ) : Real
引数 | タイプ | 説明 | |
---|---|---|---|
propertyPath | Text | -> | 計算に使用するオブジェクトプロパティのパス |
戻り値 | Real, Undefined | <- | コレクションの値の算術平均 |
|
説明
.average()
関数は、 コレクションインスタンス内で定義されている値の算術平均を返します。
計算の対象となるのは数値のみです (他の型の要素は無視されます)。
コレクションがオブジェクトを格納している場合には、計算するオブジェクトプロパティのパスを propertyPath に渡します。
.average()
は以下の場合には undefined
を返します:
- コレクションが空の場合
- コレクションに数値が含まれていない場合
- propertyPath 引数で指定したパスがコレクション内で見つからない場合
例題 1
var $col : Collection
$col:=New collection(10;20;"Monday";True;6)
$vAvg:=$col.average() //12
例題 2
var $col : Collection
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$vAvg:=$col.average("salary") //23500
.clear()
履歴
リリース | 内容 |
---|---|
v16 R6 | 追加 |
.clear() : Collection
引数 | タイプ | 説明 | |
---|---|---|---|
戻り値 | Collection | <- | 全要素が削除された元のコレクション |
|
説明
.clear()
関数は、 コレクションインスタンス内の全要素を削除し、空のコレクションを返します。
このコマンドは、元のコレクションを変更します。
例題
var $col : Collection
$col:=New collection(1;2;5)
$col.clear()
$vSize:=$col.length //$vSize=0
.combine()
履歴
リリース | 内容 |
---|---|
v16 R6 | 追加 |
.combine( col2 : Collection {; index : Integer } ) : Collection
引数 | タイプ | 説明 | |
---|---|---|---|
col2 | Collection | -> | 追加するコレクション |
index | Integer | -> | 追加要素を挿入する位置 (デフォルトは length+1) |
戻り値 | Collection | <- | 追加要素を格納した元のコレクション |
|
説明
.combine()
関数は、 コレクションインスタンスの最後、あるいは index で指定した位置に col2 の要素を挿入し、変更された元のコレクションを返します。 .insert()
関数とは異なり、.combine()
は col2 の各要素を元のコレクション追加します (col2 自体が単一のコレクション要素としては挿入されるわけではありません)。
このコマンドは、元のコレクションを変更します。
デフォルトでは、col2 の要素は元のコレクションの最後 に追加されます。 index に引数を渡すことで、col2 の要素を挿入する位置を指定することができます。
警告: コレクション要素は 0 起点である点に注意してください。
- 指定した index がコレクションの length より大きい場合、実際の開始インデックスはコレクションの length に設定されます。
- index < 0 の場合、index:=index+length として再計算されます (コレクションの終端からのオフセットであるとみなされます)。
- 計算結果も負の値である場合、index は 0 に設定されます。
例題
var $c; $fruits : Collection
$c:=New collection(1;2;3;4;5;6)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]
.concat()
履歴
リリース | 内容 |
---|---|
v16 R6 | 追加 |
.concat( value : any { ;...valueN } ) : Collection
引数 | タイプ | 説明 | |
---|---|---|---|
value | Number, Text, Object, Collection, Date, Time, Boolean, Picture | -> | 連結する値。 value がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。 |
戻り値 | Collection | <- | 元のコレクションに値が追加された新規コレクション |
|