メインコンテンツまでスキップ
バージョン: v19 R8 BETA

Collection

Collectionクラスは コレクション 型の変数を扱います。

コレクションは次のように初期化します:

New collection {( ...value : any )} : Collection     空の、あるいは値の入った新規コレクションを作成し、その参照を返します
New shared collection {( ...value : any )} : Collection     空の、あるいは値の入った新規の共有コレクションを作成し、その参照を返します

例題

 var $colVar : Collection // コレクション型の 4D変数の宣言
$colVar:=New collection // コレクションの初期化と 4D変数への代入

概要

.average( {propertyPath : Text } ) : Real    コレクションインスタンス内で定義されている値の算術平均を返します
.clear() : Collection    コレクションインスタンス内の全要素を削除し、空のコレクションを返します
.combine( col2 : Collection {; index : Integer } ) : Collection    コレクションインスタンスの最後、あるいは index で指定した位置に col2 の要素を挿入し、変更された元のコレクションを返します
.concat( value : any { ;...valueN } ) : Collection    value に指定した要素を元のコレクションの最後に追加した、新しいコレクションを返します
.copy() : Collection
.copy( option : Integer ) : Collection
.copy( option : Integer ; groupWithCol : Collection ) : Collection
.copy( option : Integer ; groupWithObj : Object ) : Collection
     コレクションインスタンスのディープ・コピーを返します
.count( { propertyPath : Text } ) : Real    コレクション内の、null ではない要素の個数を返します
.countValues( value : any {; propertyPath : Text } ) : Real    value 引数に指定した値がコレクション内において見つかった回数を返します
.distinct( {option : Integer} ) : Collection
.distinct( propertyPath : Text {; option : Integer } ) : Collection
    元のコレクションから重複しない (異なる) 値のみを格納した新しいコレクションを返します
.equal( collection2 : Collection {; option : Integer } ) : Boolean    コレクションを collection2 とディープ比較し、同一の場合には true を返します
.every( { startFrom : Integer ; } formula : 4D.Function { ;...param : any } ) : Boolean
.every( { startFrom : Integer ; } methodName : Text { ;...param : any } ) : Boolean
    コレクション内の全要素が、formula オブジェクトまたは methodName に指定したメソッドで実装されたテストにパスした場合には true を返します
.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathN : Text ;... targetPathN : Text } ) : Collection
    元のオブジェクトのコレクションから、propertyPath 引数が指定するプロパティ値を抽出し、新しいコレクションに格納して返します
.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection
    コレクションを value 引数の値で満たし、同コレクションを返します。オプションとして、startFrom および end インデックスを渡して代入開始位置および終了位置を指定することもできます
.filter( formula : 4D.Function { ; ...param : any } ) : Collection
.filter( methodName : Text { ; ...param : any } ) : Collection
    元のコレクション要素のうち、formula フォーミュラまたは methodName メソッドの結果が true になる要素をすべて格納した新しいコレクションを返します
.find( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : any
.find( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : any
    formula 引数のフォーミュラまたは methodName 引数のメソッドを各コレクション要素に適用して、true を返す最初の要素を返します
.findIndex( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Integer
.findIndex( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Integer
    formula 引数のフォーミュラまたは methodName 引数のメソッドを各コレクション要素に適用して、true を返す最初の要素のインデックスを返します
.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer     toSearch 引数の式をコレクション要素の中から検索し、最初に見つかった要素のインデックス (見つからなかった場合には -1) を返します
.indices( queryString : Text { ; ...value : any } ) : Collection     queryString 引数の検索条件に合致する、元のコレクション要素のインデックスを返します
.insert( index : Integer ; element : any ) : Collection      index で指定したコレクションインスタンスの位置に element 要素を挿入し、変更された元のコレクションを返します
.join( delimiter : Text { ; option : Integer } ) : Text     delimiter に渡した文字列を区切り文字として、コレクションの全要素を一つの文字列につなげます
.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer     toSearch 引数の式をコレクション要素の中から検索し、最後に見つかった要素のインデックスを返します
.length : Integer    コレクション内の要素数を返します
.map( formula : 4D.Function { ; ...param : any } ) : Collection
.map( methodName : Text { ; ...param : any } ) : Collection
    元のコレクションの各要素に対して formula フォーミュラまたは methodName メソッドを呼び出した結果に基づいた、新しいコレクションを作成します
.max( { propertyPath : Text } ) : any     コレクション内の最大値を持つ要素を返します
.min( { propertyPath : Text } ) : any     コレクション内の最小値を持つ要素を返します
.orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection
    コレクションの要素を指定順に並べ替えた新しいコレクションを返します
.orderByMethod( formula : 4D.Function { ; ...extraParam : expression } ) : Collection
.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection
    formula フォーミュラまたは methodName メソッドを通して定義された順番でコレクション要素を並べ替えた新しいコレクションを返します
.pop() : any     コレクションから最後の要素を取り除き、それを戻り値として返します
.push( element : any { ;...elementN } ) : Collection     一つ以上の element 引数をコレクションインスタンスの最後に追加し、変更された元のコレクションを返します
.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection
    検索条件に合致するオブジェクトコレクションの要素をすべて返します
.reduce( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduce( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any
    formula または methodName コールバックをアキュムレーターおよびコレクションの各要素に (左から右へ) 適用して、単一の値にまとめます
.remove( index : Integer { ; howMany : Integer } ) : Collection     index で指定した位置から一つまた複数のコレクション要素を削除し、変更されたコレクションを返します
.resize( size : Integer { ; defaultValue : any } ) : Collection     コレクションの length を引数で指定されたサイズに設定し、変更された元のコレクションを返します
.reverse( ) : Collection     全要素が逆順になった、コレクションのディープ・コピーを返します
.shift() : any    コレクションの先頭要素を取り除き、それを戻り値として返します
.slice( startFrom : Integer { ; end : Integer } ) : Collection    コレクションの一部を、新しいコレクションとして返します
.some( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Boolean
.some( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Boolean
    少なくとも一つのコレクション要素が、formula または methodName に指定したコードで実装されたテストにパスした場合に true を返します
.sort( formula : 4D.Function { ; ...extraParam : any } ) : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection
    コレクションの要素を並べ替え、並べ替えられた元のコレクションを返します
.sum( { propertyPath : Text } ) : Real    コレクションインスタンスの全要素の値を合計して返します
.unshift( value : any { ;...valueN : any } ) : Collection    一つ以上の value 引数をコレクションインスタンスの先頭に挿入します

New collection

New collection {( ...value : any )} : Collection

引数タイプ説明
valueNumber, Text, Date, Time, Boolean, Object, Collection, Picture, Pointer->コレクションの値
戻り値Collection<-新しいコレクション

|

説明

New collection コマンドは、 空の、あるいは値の入った新規コレクションを作成し、その参照を返します 。

引数を渡さなかった場合、New collection は空のコレクションを作成し、その参照を返します。

返された参照は、コレクション型の 4D変数に代入する必要があります。

var : CollectionC_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

引数タイプ説明
valueNumber, Text, Date, Time, Boolean, Shared object, Shared collection->共有コレクションの値
戻り値Collection<-新規の共有コレクション

|

説明

New shared collection コマンドは、 空の、あるいは値の入った新規の共有コレクションを作成し、その参照を返します 。

このコレクションに要素を追加する場合には Use...End use 構造でくくる必要があり、そうしない場合にはエラーが返されます。 ただし、属性の読み取りは Use...End use 構造の外側でも可能です。

共有コレクションについての詳細は、共有オブジェクトと共有コレクション のページを参照してください。

引数を渡さない場合、New shared collection は空のコレクションを作成し、その参照を返します。

返された参照は、コレクション型の 4D変数に代入する必要があります。

var : CollectionC_COLLECTION ステートメントはコレクション型の変数を宣言しますが、コレクション自体は作成しないという点に注意してください。

任意で、一つ以上の value 引数を渡すことで、あらかじめ値の入った新しい共有コレクションを作成することができます。 または、あとからオブジェクト記法による代入で要素を一つずつ追加・編集していくことができます (例題参照)。

共有コレクションの最終要素を超える要素番号 (インデックス) を指定した場合、共有コレクションは自動的にリサイズされ、合い間の要素にはすべて null 値が割り当てられらます。

以下のサポートされる型であれば、いくつでも値を渡すことができます:

  • 数値 (実数、倍長整数...)。 数値は常に実数として保存されます。
  • text
  • boolean
  • date
  • 時間 (ミリ秒の数 (実数) として保存されます)。
  • null
  • 共有オブジェクト(*)
  • 共有コレクション(*)

標準のコレクション (非共有コレクション) とは異なり、共有コレクションはピクチャーやポインター、共有でないオブジェクトおよびコレクションはサポートしていません。

(*) 共有オブジェクトおよびコレクションが共有コレクションに追加された場合、それらは同じ ロック識別子 を共有します。 この点についてのより詳細は、4D Doc Center を参照ください。

例題

 $mySharedCol:=New shared collection("alpha";"omega")
Use($mySharedCol)
$mySharedCol[1]:="beta"
End use

.average()

履歴
バージョン内容
v16 R6追加

.average( {propertyPath : Text } ) : Real

引数タイプ説明
propertyPathText->計算に使用するオブジェクトプロパティのパス
戻り値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

引数タイプ説明
col2Collection->追加するコレクション
indexInteger->追加要素を挿入する位置 (デフォルトは 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

引数タイプ説明
valueNumber, Text, Object, Collection, Date, Time, Boolean, Picture->連結する値。 value がコレクションの場合、コレクションの全要素が元のコレクションに追加されます。
戻り値Collection<-元のコレクションに値が追加された新規コレクション

|

説明

.concat() 関数は、 value に指定した要素を元のコレクションの最後に追加した、新しいコレクションを返します。

このコマンドは、元のコレクションを変更しません。

value がコレクションの場合、その全要素が新しい要素として元のコレクションの最後に追加されます。 value がコレクションでない場合、それ自体が新しい要素として追加されます。

例題

var $c : Collection
$c:=New collection(1;2;3;4;5)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$fruits.push(New object("Intruder";"Tomato"))
$c2:=$c.concat($fruits) //[1,2,3,4,5,"Orange","Banana","Apple","Grape",{"Intruder":"Tomato"}]
$c2:=$c.concat(6;7;8) //[1,2,3,4,5,6,7,8]

.copy()

履歴
バージョン内容
v18 R3ck shared オプションの追加。 groupWith パラメーターを追加。
v16 R6追加

.copy() : Collection
.copy( option : Integer ) : Collection
.copy( option : Integer ; groupWithCol : Collection ) : Collection
.copy( option : Integer ; groupWithObj : Object ) : Collection

引数タイプ説明
optionInteger->ck resolve pointers: コピー前にポインターを解決する
ck shared: 共有コレクションを返す
groupWithColCollection->結果のコレクションとグループする共有コレクション
groupWithObjObject->結果のコレクションとグループする共有オブジェクト
戻り値Collection<-元のコレクションのディープ・コピー

|

説明

.copy() 関数は、 コレクションインスタンスのディープ・コピーを返します。ディープ・コピー とは、元のコレクション内のオブジェクトやコレクションは複製されることを意味し、返されたコレクションと元のコレクションは参照を共有しないということを意味します。

このコマンドは、元のコレクションを変更しません。

任意の option パラメーターには、以下のどちらか (あるいは両方) の定数を渡すことができます:

option説明
ck resolve pointersオリジナルのコレクションがポインター型の値を格納している場合、デフォルトではコピー先のオブジェクトもポインターを格納します。 しかしながら、ck resolve pointers 定数を渡すことで、コピー時にポインターを解決することができます。 この場合、コレクション内の各ポインターはコピー時に解決され、解決済みの値が使用されます。
ck shared共有コレクションに対して適用された場合でも、copy() はデフォルトで通常の (非共有の) コレクションを返します。 共有コレクションを作成するには、ck shared 定数を渡します。 この場合には、groupWith パラメーターに引数を渡して他の共有オブジェクトまたは共有コレクションに関連づけることもできます (以下参照)。

groupWithCol または groupWithObj 引数を渡すと、結果のコレクションを関連づけるコレクションまたはオブジェクトを指定できます。

例題 1

通常の (非共有の) コレクション $lastnames を、共有オブジェクト $sharedObject 内にコピーします。 このためには、まず共有コレクション ($sharedLastnames) を作成する必要があります。

var $sharedObject : Object
var $lastnames;$sharedLastnames : Collection
var $text : Text

$sharedObject:=New shared object

$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) // $lastnames は通常のコレクションです

$sharedLastnames:=$lastnames.copy(ck shared) // $sharedLastnames は共有コレクションです

// $sharedLastnames は $sharedObject の中に入れられます
Use($sharedObject)
$sharedObject.lastnames:=$sharedLastnames
End use

例題 2

どちらも共有コレクションである $sharedColl1$sharedColl2 を結合します。 これらは異なる共有グループに所属しているため、直接結合した場合にはエラーが生成されます。 そこで、 $sharedColl1 のコピーを作成し、$sharedColl2 をそのコピーの共有グループ先に指定します。

var $sharedColl1;$sharedColl2;$copyColl : Collection

$sharedColl1:=New shared collection(New shared object("lastname";"Smith"))
$sharedColl2:=New shared collection(New shared object("lastname";"Brown"))

// $copyColl を $sharedColl2 と同じ共有グループに所属させます
$copyColl:=$sharedColl1.copy(ck shared;$sharedColl2)
Use($sharedColl2)
$sharedColl2.combine($copyColl)
End use

例題 3

通常のコレクション ($lastnames) があり、それをアプリケーションの Storage に入れます。 これには、先に共有コレクション ($sharedLastnames) を作成しておく必要があります。

var $lastnames;$sharedLastnames : Collection
var $text : Text

$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) // $lastnames は通常の (非共有) コレクションです

$sharedLastnames:=$lastnames.copy(ck shared) // 共有コピー

Use(Storage)
Storage.lastnames:=$sharedLastnames
End use

例題 4

ck resolve pointers オプションを使用した場合のふるまいです:

 var $col : Collection
var $p : Pointer
$p:=->$what

$col:=New collection
$col.push(New object("alpha";"Hello";"num";1))
$col.push(New object("beta";"You";"what";$p))

$col2:=$col.copy()
$col2[1].beta:="World!"
ALERT($col[0].alpha+" "+$col2[1].beta) // "Hello world!" を表示します

$what:="You!"
$col3:=$col2.copy(ck resolve pointers)
ALERT($col3[0].alpha+" "+$col3[1].what) // "Hello You!" を表示します

.count()

履歴
バージョン内容
v16 R6追加

.count( { propertyPath : Text } ) : Real

引数タイプ説明
propertyPathText->計算に使用するオブジェクトプロパティのパス
戻り値Real<-コレクション内の要素の数

|

説明

.count() 関数は、 コレクション内の、null ではない要素の個数を返します。

コレクションがオブジェクトを含んでいる場合、propertyPath 引数を渡すことができます。 この場合、propertyPath で指定したパスを含む要素のみがカウントされます。

例題

 var $col : Collection
var $count1;$count2 : Real
$col:=New collection(20;30;Null;40)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$col.push(New object("lastName";"Henry";"salary";12000))
$count1:=$col.count() // $count1=7
$count2:=$col.count("name") // $count2=3

.countValues()

履歴
バージョン内容
v16 R6追加

.countValues( value : any {; propertyPath : Text } ) : Real

引数タイプ説明
valueText, Number, Boolean, Date, Object, Collection->数える値
propertyPathText->計算に使用するオブジェクトプロパティのパス
戻り値Real<-値の出現回数

|

説明

.countValues() 関数は、 value 引数に指定した値がコレクション内において見つかった回数を返します。

value には、以下のいずれかを渡すことができます:

  • スカラー値 (テキスト、数値、ブール、日付)
  • オブジェクトあるいはコレクションの参照

要素が検出されるためには、value 引数の型が要素の型と合致している必要があります。このファンクションは等号演算子を使用します。

任意の propertyPath 引数を渡すと、オブジェクトのコレクションにおける値の個数を数えることができます。 propertyPath には値を検索するプロパティパスを渡します。

このコマンドは、元のコレクションを変更しません。

例題 1

 var $col : Collection
var $vCount : Integer
$col:=New collection(1;2;5;5;5;3;6;4)
$vCount:=$col.countValues(5) // $vCount=3

例題 2

 var $col : Collection
var $vCount : Integer
$col:=New collection
$col.push(New object("name";"Smith";"age";5))
$col.push(New object("name";"Wesson";"age";2))
$col.push(New object("name";"Jones";"age";3))
$col.push(New object("name";"Henry";"age";4))
$col.push(New object("name";"Gross";"age";5))
$vCount:=$col.countValues(5;"age") //$vCount=2

例題 3

 var $numbers; $letters : Collection
var $vCount : Integer

$letters:=New collection("a";"b";"c")
$numbers:=New collection(1;2;$letters;3;4;5)

$vCount:=$numbers.countValues($letters) //$vCount=1

.distinct()

履歴
バージョン内容
v16 R6追加

.distinct( {option : Integer} ) : Collection
.distinct( propertyPath : Text {; option : Integer } ) : Collection

引数タイプ説明
optionInteger->ck diacritical: アクセント等の発音区別符号を無視しない評価 (たとえば "A" # "a")
propertyPathText->重複しない値を取得する属性のパス
戻り値Collection<-重複しない値のみを格納した新規コレクション

|

説明

.distinct() 関数は、 元のコレクションから重複しない (異なる) 値のみを格納した新しいコレクションを返します。

このコマンドは、元のコレクションを変更しません。

返されたコレクションは自動的に並べ替えられています。 Null 値は返されません。

デフォルトでは、アクセント等の発音区別符号を無視した評価が実行されます。 評価の際に文字の大小を区別したり、アクセント記号を区別したい場合には、optionck diacritical 定数を渡します。

コレクションがオブジェクトを格納している場合には、重複しない値を取得するオブジェクトプロパティのパスを propertyPath に渡します。

例題

 var $c; $c2 : Collection
$c:=New collection
$c.push("a";"b";"c";"A";"B";"c";"b";"b")
$c.push(New object("size";1))
$c.push(New object("size";3))
$c.push(New object("size";1))
$c2:=$c.distinct() //$c2=["a","b","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct(ck diacritical) //$c2=["a","A","b","B","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct("size") //$c2=[1,3]

.equal()

履歴
バージョン内容
v16 R6追加

.equal( collection2 : Collection {; option : Integer } ) : Boolean

引数タイプ説明
collection2Collection->比較するコレクション
optionInteger->ck diacritical: アクセント等の発音区別符号を無視しない評価 (たとえば "A" # "a")
戻り値Boolean<-コレクションが同一の場合には true、それ以外は false

|

説明

.equal() 関数は、 コレクションを collection2 とディープ比較し、同一の場合には true を返します 。

デフォルトでは、アクセント等の発音区別符号を無視した評価が実行されます。 評価の際に文字の大小を区別したり、アクセント記号を区別したい場合には、option に ck diacritical 定数を渡します。

Null値の要素は undefined要素と同じとはみなされません。

例題

 var $c; $c2 : Collection
var $b : Boolean

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3;4)
$b:=$c.equal($c2) // false

$c:=New collection(New object("1";"a";"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3)
$b:=$c.equal($c2) // false

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2) // true

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2;ck diacritical) //false

.every()

履歴
バージョン内容
v19 R6フォーミュラをサポート
v16 R6追加

.every( { startFrom : Integer ; } formula : 4D.Function { ;...param : any } ) : Boolean
.every( { startFrom : Integer ; } methodName : Text { ;...param : any } ) : Boolean

引数タイプ説明
startFromInteger->テストを開始するインデックス
formula4D.Function->フォーミュラオブジェクト
methodNameText->メソッド名
paramMixed->formula または methodName に渡す引数
戻り値Boolean<-すべての要素がテストをパスすれば true

|

説明

.every() 関数は、 コレクション内の全要素が、formula オブジェクトまたは methodName に指定したメソッドで実装されたテストにパスした場合には true を返します。

次のいずれかを使用して、コレクション要素を評価するために実行されるコールバックを指定します:

  • formula (推奨シンタックス)、関数やプロジェクトメソッドを含むあらゆる実行可能な式を格納できる Formula オブジェクト
  • または methodName、プロジェクトメソッドの名前 (テキスト)。

コールバックには、param (任意) に指定した引数が渡されます。 引数の有無にかかわらず、コールバックは任意のテストを実行でき、テストを満たす要素に対しては true を返さなくてはなりません。 コールバックは最初のパラメータ ($1) に Object を受け取ります。

コールバックは以下の引数を受け取ります:

  • $1.value: 評価する要素の値
  • $2: param
  • $N...: paramN...

また、コールバックは以下のパラメータを設定できます:

  • (メソッドを使用する場合は必須) $1.result (ブール): 要素の値の評価が成功した場合には true 、それ以外は false
  • $1.stop (ブール、任意): メソッドコールバックを止める場合には true。 返された値は最後に計算されたものです。

.every() 関数は、false として評価されたコレクション要素を発見すると、コールバックの呼び出しをやめて false を返します。

デフォルトでは、.every() はコレクション全体をテストします。 任意で、startFrom にテストを開始する要素のインデックスを渡すこともできます。

  • startFrom がコレクションの length 以上だった場合、false が返されます。これはコレクションがテストされていないことを意味します。
  • startFrom < 0 の場合には、コレクションの終わりからのオフセットであるとみなされます(startFrom:=startFrom+length)。
  • startFrom = 0 の場合、コレクション全体がテストされます (デフォルト)。

例題 1

var $c : Collection  
var $b : Boolean
var $f : 4D.Function

$f:=Formula($1.value>0)
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every($f) // true を返します
$c.push(-1)
$b:=$c.every($f) // false を返します

例題 2

コレクション要素がすべて実数型であるかをテストします:

var $c : Collection
var $b : Boolean
var $f : 4D.Function

$f:=Formula(Value type($1.value)=$2
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every($f;Is real) //$b=true
$c:=$c.push(New object("name";"Cleveland";"zc";35049))
$c:=$c.push(New object("name";"Blountsville";"zc";35031))
$b:=$c.every($f;Is real) //$b=false

.extract()

履歴

|バージョン|内容|

|---|---| |v16 R6|Added|

.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathN : Text ;... targetPathN : Text } ) : Collection

引数タイプ説明
propertyPathText->新しいコレクションに抽出する値のオブジェクトプロパティパス
targetpathText->抽出先のプロパティパスあるいはプロパティ名
optionInteger->ck keep null: 返されるコレクションに null プロパティを含めます (デフォルトでは無視されます)。 targetPath を渡した場合には、この引数は無視されます。
戻り値Collection<-抽出した値を格納した新しいコレクション

|

説明

.extract() 関数は、 元のオブジェクトのコレクションから、propertyPath 引数が指定するプロパティ値を抽出し、新しいコレクションに格納して返します。

このコマンドは、元のコレクションを変更しません。

戻り値のコレクションの中身は、targetPath 引数によります:

  • targetPath が省略された場合、.extract() は元のコレクションの propertyPath と同じパスを使って、新しいコレクションに値を格納します。

    デフォルトでは、propertyPath のパスの要素が null あるいは undefined であった場合には、その要素は無視され、返されるコレクションに格納されません。 option パラメーターに ck keep null 定数を渡すと、これらの要素は返されるコレクションに null 要素として格納されます。

  • 一つ以上の targetPath 引数が渡された場合、.extract() は元のコレクションの propertyPath から値を抽出し、対応する targetPath に値を保存したオブジェクトを新しいコレクションの各要素として格納します。 Null値はそのまま保持されます (このシンタックスでは option に引数を渡しても無視されます)。

例題 1

var $c : Collection
$c:=New collection
$c.push(New object("name";"Cleveland"))
$c.push(New object("zip";5321))
$c.push(New object("name";"Blountsville"))
$c.push(42)
$c2:=$c.extract("name") // $c2=[Cleveland,Blountsville]
$c2:=$c.extract("name";ck keep null) //$c2=[Cleveland,null,Blountsville,null]

例題 2

var $c : Collection
$c:=New collection
$c.push(New object("zc";35060))
$c.push(New object("name";Null;"zc";35049))
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.extract("name";"City") //$c2=[{City:null},{City:Cleveland},{City:Blountsville},{City:Adger},{City:Clanton},{City:Clanton}]
$c2:=$c.extract("name";"City";"zc";"Zip") //$c2=[{Zip:35060},{City:null,Zip:35049},{City:Cleveland,Zip:35049},{City:Blountsville,Zip:35031},{City:Adger,Zip:35006},{City:Clanton,Zip:35046},{City:Clanton,Zip:35045}]

.fill()

履歴
バージョン内容
v16 R6追加

.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection

引数タイプ説明
valuenumber, Text, Collection, Object, Date, Boolean->代入する値
startFromInteger->開始インデックス (含まれる)
endInteger->終了インデックス (含まれない)
戻り値collection<-値が代入された元のコレクション

|

説明

.fill() 関数は、 コレクションを value 引数の値で満たし、同コレクションを返します。オプションとして、startFrom および end インデックスを渡して代入開始位置および終了位置を指定することもできます。

このコマンドは、元のコレクションを変更します。

  • startFrom 引数が渡されなかった場合、value 引数の値はコレクションの全要素に代入されます (つまり、startFrom=0)。
  • startFrom 引数が渡され、かつ end 引数が省略された場合には、value 引数の値はコレクションの最後の要素まで設定されます (つまり、end=length)。
  • startFromend 引数が両方渡された場合には、startFrom から end までの要素に value が代入されます。

引数に矛盾がある場合、次のように解釈されます:

  • startFrom < 0 の場合、startFrom:=startFrom+length として再計算されます (コレクションの終端からのオフセットであるとみなされます)。 再計算された値も負の値だった場合、startFrom は 0 に設定されます。
  • end < 0 の場合、それは end:=end+length として再計算されます。
  • 渡された値、あるいは再計算された値が end < startFrom の場合、関数はなにもしません。

例題

 var $c : Collection
$c:=New collection(1;2;3;"Lemon";Null;"";4;5)
$c.fill("2") // $c:=[2,2,2,2,2,2,2,2]
$c.fill("Hello";5) // $c=[2,2,2,2,2,Hello,Hello,Hello]
$c.fill(0;1;5) // $c=[2,0,0,0,0,Hello,Hello,Hello]
$c.fill("world";1;-5) //-5+8=3 -> $c=[2,"world","world",0,0,Hello,Hello,Hello]

.filter()

履歴
バージョン内容
v19 R6フォーミュラをサポート
v16 R6追加

.filter( formula : 4D.Function { ; ...param : any } ) : Collection
.filter( methodName : Text { ; ...param : any } ) : Collection

引数タイプ説明
formula4D.Function->フォーミュラオブジェクト
methodNameText->メソッド名
paramany->formula または methodName に渡す引数
戻り値Collection<-フィルターされた要素を格納した新しいコレクション (シャロウ・コピー)

|

説明

.filter() 関数は、 元のコレクション要素のうち、formula フォーミュラまたは methodName メソッドの結果が true になる要素をすべて格納した新しいコレクションを返します。 この関数は シャロウ・コピー を返します。つまり、元のコレクションにオブジェクト要素やコレクション要素が含まれていた場合、それらの参照は戻り値のコレクションで共有されます。 また、元のコレクションが共有コレクションであった場合、返されるコレクションもまた共有コレクションになります。

このコマンドは、元のコレクションを変更しません。

次のいずれかを使用して、コレクション要素をフィルターするために実行されるコールバックを指定します:

  • formula (推奨シンタックス)、関数やプロジェクトメソッドを含むあらゆる実行可能な式を格納できる Formula オブジェクト
  • または methodName、プロジェクトメソッドの名前 (テキスト)。

コールバックには、param (任意) に指定した引数が渡されます。 引数の有無にかかわらず、コールバックは任意のテストを実行でき、条件を満たす要素に対しては true を返すことで、新規コレクションにプッシュします。 コールバックは最初のパラメータ ($1) に Object を受け取ります。

コールバックは以下の引数を受け取ります:

  • $1.value: 評価する要素の値
  • $2: param
  • $N...: paramN...

また、コールバックは以下のパラメータを設定できます:

  • (メソッドを使用する場合は必須) $1.result (ブール): 要素の値がフィルター条件に合致する場合には true 、それ以外は false
  • $1.stop (ブール、任意): メソッドコールバックを止める場合には true。 返された値は最後に計算されたものです。

例題 1

コレクションから、長さが 6未満であるテキスト要素を取得します:

var $col;$colNew : Collection
$col:=New collection("hello";"world";"red horse";66;"tim";"san jose";"miami")
$colNew:=$col.filter(Formula((Value type($1.value)=Is text) && (Length($1.value)<$2)); 6)
//$colNew=["hello","world","tim","miami"]

例題 2

値の型に応じて要素をフィルターします:

 var $c;$c2;$c3 : Collection
var $f : 4D.Function

$f:=Formula(OB Get type($1;"value")=$2)
$c:=New collection(5;3;1;4;6;2)
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c2:=$c.filter($f;Is real) // $c2=[5,3,1,4,6,2]
$c3:=$c.filter($f;Is object)
// $c3=[{name:Cleveland,zc:35049},{name:Blountsville,zc:35031}]

.find()

履歴
バージョン内容
v19 R6フォーミュラをサポート
v16 R6追加

.find( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : any
.find( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : any

引数タイプ説明
startFromInteger->検索を開始するインデックス
formula4D.Function->フォーミュラオブジェクト
methodNameText->メソッド名
paramany->formula または methodName に渡す引数
戻り値any<-最初に見つかった値。見つからなかった場合には Undefined

|

説明

.find() 関数は、 formula 引数のフォーミュラまたは methodName 引数のメソッドを各コレクション要素に適用して、true を返す最初の要素を返します。

このコマンドは、元のコレクションを変更しません。

次のいずれかを使用して、コレクション要素を評価するために実行されるコールバックを指定します:

  • formula (推奨シンタックス)、関数やプロジェクトメソッドを含むあらゆる実行可能な式を格納できる Formula オブジェクト
  • または methodName、プロジェクトメソッドの名前 (テキスト)。

コールバックには、param (任意) に指定した引数が渡されます。 引数の有無にかかわらず、コールバックは任意のテストを実行でき、条件を満たす最初の要素に対して true を返さなくてはなりません。 コールバックは最初のパラメータ ($1) に Object を受け取ります。

コールバックは以下の引数を受け取ります:

  • $1.value: 評価する要素の値
  • $2: param
  • $N...: paramN...

また、コールバックは以下のパラメータを設定できます:

  • (メソッドを使用する場合は必須) $1.result (ブール): 要素の値が検索条件に合致する場合には true 、それ以外は false
  • $1.stop (ブール、任意): メソッドコールバックを止める場合には true。 返された値は最後に計算されたものです。

デフォルトでは、.find() はコレクション全体をテストします。 任意で、startFrom に検索を開始する要素のインデックスを渡すこともできます。

  • startFrom がコレクションの length 以上だった場合、-1 が返されます。これはコレクションが検索されていないことを意味します。
  • startFrom < 0 の場合には、コレクションの終わりからのオフセットであるとみなされます(startFrom:=startFrom+length)。 注: startFrom が負の値であっても、コレクションは左から右へと検索されます。
  • startFrom = 0 の場合、コレクション全体がテストされます (デフォルト)。

例題 1

長さが 5未満の最初のテキスト要素を取得します:

var $col : Collection
$col:=New collection("hello";"world";4;"red horse";"tim";"san jose")
$value:=$col.find(Formula((Value type($1.value)=Is text) && (Length($1.value)<$2)); 5) //$value="tim"

例題 2

コレクション内を都市名で検索します:

var $c : Collection
var $c2 : Object
$c:=New collection
$c.push(New object("name"; "Cleveland"; "zc"; 35049))
$c.push(New object("name"; "Blountsville"; "zc"; 35031))
$c.push(New object("name"; "Adger"; "zc"; 35006))
$c.push(New object("name"; "Clanton"; "zc"; 35046))
$c.push(New object("name"; "Clanton"; "zc"; 35045))

$c2:=$c.find(Formula($1.value.name=$2); "Clanton") //$c2={name:Clanton,zc:35046}

.findIndex()

履歴
バージョン内容
v19 R6フォーミュラをサポート
v16 R6追加

.findIndex( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Integer
.findIndex( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Integer

引数タイプ説明
startFromInteger->検索を開始するインデックス
formula4D.Function->フォーミュラオブジェクト
methodNameText->メソッド名
paramany->formula または methodName に渡す引数
戻り値Integer<-最初に見つかった値のインデックス。見つからなかった場合には -1

|

説明

.findIndex() 関数は、 formula 引数のフォーミュラまたは methodName 引数のメソッドを各コレクション要素に適用して、true を返す最初の要素のインデックスを返します。

このコマンドは、元のコレクションを変更しません。

次のいずれかを使用して、コレクション要素を評価するために実行されるコールバックを指定します:

  • formula (推奨シンタックス)、関数やプロジェクトメソッドを含むあらゆる実行可能な式を格納できる Formula オブジェクト
  • methodName、プロジェクトメソッドの名前 (テキスト)。

コールバックには、param (任意) に指定した引数が渡されます。 引数の有無にかかわらず、コールバックは任意のテストを実行でき、条件を満たす最初の要素に対して true を返さなくてはなりません。 コールバックは最初のパラメータ ($1) に Object を受け取ります。

コールバックは以下の引数を受け取ります:

  • $1.value: 評価する要素の値
  • $2: param
  • $N...: paramN...

また、コールバックは以下のパラメータを設定できます:

  • (メソッドを使用する場合は必須) $1.result (ブール): 要素の値が検索条件に合致する場合には true 、それ以外は false
  • $1.stop (ブール、任意): メソッドコールバックを止める場合には true。 返された値は最後に計算されたものです。

デフォルトでは、.findIndex() はコレクション全体をテストします。 任意で、startFrom に検索を開始する要素のインデックスを渡すこともできます。

  • startFrom がコレクションの length 以上だった場合、-1 が返されます。これはコレクションが検索されていないことを意味します。
  • startFrom < 0 の場合には、コレクションの終わりからのオフセットであるとみなされます(startFrom:=startFrom+length)。 注: startFrom が負の値であっても、コレクションは左から右へと検索されます。
  • startFrom = 0 の場合、コレクション全体がテストされます (デフォルト)。

例題

コレクション内で最初に合致する都市名の位置を探します:

var $c : Collection
var $val2;$val3 : Integer
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$val2:=$c.findIndex(Formula($1.value.name=$2);"Clanton") // $val2=3
$val3:=$c.findIndex($val2+1;Formula($1.value.name=$2);"Clanton") //$val3=4

.indexOf()

履歴
バージョン内容
v16 R6追加

.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer

引数タイプ説明
toSearch->コレクション内を検索する式
startFromInteger->検索を開始するインデックス
戻り値Integer<-最初に見つかった toSearch のインデックス。見つからなかった場合には -1

|

説明

.indexOf() 関数は、 toSearch 引数の式をコレクション要素の中から検索し、最初に見つかった要素のインデックス (見つからなかった場合には -1) を返します。

このコマンドは、元のコレクションを変更しません。

toSearch パラメーターには、コレクション内で検索する式を渡します。 以下のものを渡すことができます:

  • スカラー値 (テキスト、数値、ブール、日付)
  • null 値
  • オブジェクトあるいはコレクションの参照

toSearch 引数は検出すべき要素と完全に一致している必要があります (等号演算子と同じルールが適用されます)。

オプションとして、startFrom 引数を渡すことで、検索を開始するコレクション要素のインデックスを指定することができます。

  • startFrom がコレクションの length 以上だった場合、-1 が返されます。これはコレクションが検索されていないことを意味します。
  • startFrom < 0 の場合には、コレクションの終わりからのオフセットであるとみなされます(startFrom:=startFrom+length)。 注: startFrom が負の値であっても、コレクションは左から右へと検索されます。
  • startFrom = 0 の場合、コレクション全体がテストされます (デフォルト)。

例題

 var $col : Collection
var $i : Integer
$col:=New collection(1;2;"Henry";5;3;"Albert";6;4;"Alan";5)
$i:=$col.indexOf(3) //$i=4
$i:=$col.indexOf(5;5) //$i=9
$i:=$col.indexOf("al@") //$i=5
$i:=$col.indexOf("Hello") //$i=-1

.indices()

履歴
バージョン内容
v16 R6追加

.indices( queryString : Text { ; ...value : any } ) : Collection

引数タイプ説明
queryStringText->検索条件
valueany->プレースホルダー使用時: 比較する値
戻り値Collection<-queryString に合致するコレクション要素のインデックス

|

説明

.indices() 関数は .query() 関数と同様に機能しますが、 queryString 引数の検索条件に合致する、元のコレクション要素のインデックスを返します(コレクション要素自体は返しません)。 インデックスは、昇順に返されます。

このコマンドは、元のコレクションを変更しません。

queryString 引数には、以下のシンタックスを使用します:

propertyPath 比較演算子 値 {logicalOperator propertyPath 比較演算子 値}

queryString および value パラメーターの詳細については、dataClass.query() 関数を参照ください。

例題

 var $c; $icol : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))

$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$icol:=$c.indices("name = :1";"Cleveland") // $icol=[0]
$icol:=$c.indices("zc > 35040") // $icol=[0,3,4]

.insert()

履歴
バージョン内容
v16 R6追加

.insert( index : Integer ; element : any ) : Collection

引数タイプ説明
indexInteger->要素の挿入位置
elementany->コレクションに挿入する要素
戻り値Collection<-要素の挿入された元のコレクション

|

説明

.insert() 関数は、 index で指定したコレクションインスタンスの位置に element 要素を挿入し、変更された元のコレクションを返します。

このコマンドは、元のコレクションを変更します。

index パラメーターには、コレクション内で要素を挿入する位置を渡します。

警告: コレクション要素は 0 起点である点に注意してください。

  • 指定した index がコレクションの length より大きい場合、実際の開始インデックスはコレクションの length に設定されます。
  • index < 0 の場合、index:=index+length として再計算されます (コレクションの終端からのオフセットであるとみなされます)。
  • 計算結果も負の値である場合、index は 0 に設定されます。

コレクションが受け入れるものであれば、どんな型の要素も (たとえば他のコレクションでも) 挿入可能です。

例題

 var $col : Collection
$col:=New collection("a";"b";"c";"d") //$col=["a","b","c","d"]
$col.insert(2;"X") //$col=["a","b","X","c","d"]
$col.insert(-2;"Y") //$col=["a","b","X","Y","c","d"]
$col.insert(-10;"Hi") //$col=["Hi","a","b","X","Y","c","d"]

.join()

履歴
バージョン内容
v16 R6追加

.join( delimiter : Text { ; option : Integer } ) : Text

引数タイプ説明
delimiterText->要素間に用いる区切り文字
optionInteger->ck ignore null or empty: 戻り値に null と空の文字列を含めない
戻り値Text<-区切り文字を使ってコレクションの全要素をつなげた文字列

|

説明

.join() 関数は、 delimiter に渡した文字列を区切り文字として、コレクションの全要素を一つの文字列につなげます。戻り値はつなげられた文字列です。

このコマンドは、元のコレクションを変更しません。

デフォルトで、コレクションの null あるいは空の要素も戻り値の文字列に含めます。 これらを戻り値の文字列に含めたくない場合は、option パラメーターに ck ignore null or empty 定数を渡します。

例題

 var $c : Collection
var $t1;$t2 : Text
$c:=New collection(1;2;3;"Paris";Null;"";4;5)
$t1:=$c.join("|") //1|2|3|Paris|null||4|5
$t2:=$c.join("|";ck ignore null or empty) //1|2|3|Paris|4|5

.lastIndexOf()

履歴
バージョン内容
v16 R6追加

.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer

引数タイプ説明
toSearch->コレクション内を検索する要素
startFromInteger->検索を開始するインデックス
戻り値Integer<-最後に見つかった toSearch のインデックス。見つからなかった場合には -1

|

説明

.lastIndexOf() 関数は、 toSearch 引数の式をコレクション要素の中から検索し、最後に見つかった要素のインデックスを返します(見つからなかった場合には -1)。

このコマンドは、元のコレクションを変更しません。

toSearch パラメーターには、コレクション内で検索する式を渡します。 以下のものを渡すことができます:

  • スカラー値 (テキスト、数値、ブール、日付)
  • null 値
  • オブジェクトあるいはコレクションの参照

toSearch 引数は検出すべき要素と完全に一致している必要があります (等号演算子と同じルールが適用されます)。

オプションとして、startFrom 引数を渡すことで、逆順検索を開始するコレクション要素のインデックスを指定することができます。

  • startFrom が、コレクションの length から 1を引いた数字 (coll.length-1) 以上の場合、コレクション全体が検索されます (デフォルト)。
  • startFrom < 0 の場合、startFrom:=startFrom+length として再計算されます (コレクションの終端からのオフセットであるとみなされます)。 計算結果も負の値である場合、-1 が返されます。これはコレクションが検索されていないことを意味します。 注: startFrom が負の値であっても、コレクションは右から左へと検索されます。
  • startFrom = 0 の場合、-1 が返されます。これはコレクションが検索されていないことを意味します。

例題

 var $col : Collection
var $pos1;$pos2;$pos3;$pos4;$pos5 : Integer
$col:=Split string("a,b,c,d,e,f,g,h,i,j,e,k,e";",") //$col.length=13
$pos1:=$col.lastIndexOf("e") // 戻り値: 12
$pos2:=$col.lastIndexOf("e";6) // 戻り値: 4
$pos3:=$col.lastIndexOf("e";15) // 戻り値: 12
$pos4:=$col.lastIndexOf("e";-2) // 戻り値: 10
$pos5:=$col.lastIndexOf("x") // 戻り値: -1

.length

履歴
バージョン内容
v16 R5追加

.length : Integer

説明

.length プロパティは、 コレクション内の要素数を返します。

.length プロパティは、コレクション作成時に初期化されます。 要素を追加・削除すると、必要に応じて length は更新されます。 このプロパティは 読み取り専用 です (これを使用してコレクションのサイズを設定することはできません)。

例題

 var $col : Collection // $col.length が 0 に初期化されます
$col:=New collection("one";"two";"three") // $col.length が 3 に更新されます
$col[4]:="five" // $col.length が 5 に更新されます
$vSize:=$col.remove(0;3).length // $vSize=2

.map()

履歴
バージョン内容
v19 R6フォーミュラをサポート
v16 R6追加

.map( formula : 4D.Function { ; ...param : any } ) : Collection
.map( methodName : Text { ; ...param : any } ) : Collection

引数タイプ説明
formula4D.Function->フォーミュラオブジェクト
methodNameText->メソッド名
paramany->formula または methodName に渡す引数
戻り値Collection<-変換された値を格納する新しいコレクション

|

説明

.map() 関数は、 元のコレクションの各要素に対して formula フォーミュラまたは methodName メソッドを呼び出した結果に基づいた、新しいコレクションを作成します。 オプションで、param パラメーターに、formula または methodName に渡す引数を指定することができます。 .map() は常に、元のコレクションと同じサイズのコレクションを返します ($1.stop が使用された場合を除く (後述参照))。

このコマンドは、元のコレクションを変更しません。

次のいずれかを使用して、コレクション要素を評価するために実行されるコールバックを指定します:

  • formula (推奨シンタックス)、関数やプロジェクトメソッドを含むあらゆる実行可能な式を格納できる Formula オブジェクト
  • または methodName、プロジェクトメソッドの名前 (テキスト)。

コールバックには、param (任意) に指定した引数が渡されます。 引数の有無にかかわらず、コールバックは任意の処理を実行でき、結果のコレクションに追加する変換後の新しい値を返さなくてはなりません。 コールバックは最初のパラメータ ($1) に Object を受け取ります。

コールバックは以下の引数を受け取ります:

  • $1.value: 評価する要素の値
  • $2: param
  • $N...: paramN...

また、コールバックは以下のパラメータを設定できます:

  • (メソッドを使用した場合は必須) $1.result (任意の型): 結果のコレクションに追加する、変換された値
  • $1.stop (ブール、任意): メソッドコールバックを止める場合には true。 返された値は最後に計算されたものです。

例題

var $c; $c2 : Collection
$c:=New collection(1; 4; 9; 10; 20)
$c2:=$c.map(Formula(Round(($1.value/$2)*100; 2)); $c.sum())
//$c2=[2.27,9.09,20.45,22.73,45.45]

.max()

履歴
バージョン内容
v16 R6追加

.max( { propertyPath : Text } ) : any

引数タイプ説明
propertyPathText->評価するオブジェクトプロパティのパス
戻り値Boolean, Text, Number, Collection, Object, Date<-コレクション内の最大値

|

説明

.max() 関数は、 コレクション内の最大値を持つ要素を返します (.sort() 関数を使用して昇順に並べ替えたときのコレクションの最後の要素が最大値の要素です)。

このコマンドは、元のコレクションを変更しません。

コレクションが異なる型の値を格納している場合、.max() 関数は型のリスト順の、最後の型の最大値を返します (.sort() 参照)。

コレクションがオブジェクトを格納している場合には、最大値を取得するオブジェクトプロパティのパスを propertyPath に渡します。

コレクションが空の場合、 .max()Undefined を返します。

例題

 var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$max:=$col.max() //{name:Alabama,salary:10500}
$maxSal:=$col.max("salary") //50000
$maxName:=$col.max("name") //"Wesson"

.min()

履歴
バージョン内容
v16 R6追加

.min( { propertyPath : Text } ) : any

引数タイプ説明
propertyPathText->評価するオブジェクトプロパティのパス
戻り値Boolean, Text, Number, Collection, Object, Date<-コレクション内の最小値

|

説明

.min() 関数は、 コレクション内の最小値を持つ要素を返します (.sort() 関数を使用して昇順に並べ替えたときのコレクションの先頭の要素が最小値の要素です)。

このコマンドは、元のコレクションを変更しません。

コレクションが異なる型の値を格納している場合、.min() 関数は型のリスト順の、最初の型の最小値を返します (.sort() 参照)。

コレクションがオブジェクトを格納している場合には、最小値を取得するオブジェクトプロパティのパスを propertyPath に渡します。

コレクションが空の場合、 .min()Undefined を返します。

例題

 var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$min:=$col.min() //55
$minSal:=$col.min("salary") //10000
$minName:=$col.min("name") //"Alabama"

.orderBy()

履歴
バージョン内容
v16 R6追加

.orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection

引数タイプ説明
pathStringsText->コレクションの並べ替え基準とするプロパティパス
pathObjectsCollection->条件オブジェクトのコレクション
ascOrDescInteger->ck ascending または ck descending (スカラー値)
戻り値Collection<-並べ替えられたコレクションのコピー (シャロウ・コピー)

|

説明

.orderBy() 関数は、 コレクションの要素を指定順に並べ替えた新しいコレクションを返します。

この関数は シャロウ・コピー を返します。つまり、元のコレクションにオブジェクト要素やコレクション要素が含まれていた場合、それらの参照は戻り値のコレクションで共有されます。 また、元のコレクションが共有コレクションであった場合、返されるコレクションもまた共有コレクションになります。

このコマンドは、元のコレクションを変更しません。

引数を渡さなかった場合、メソッドはコレクション内のスカラー値を昇順に並べ替えます (オブジェクトやコレクションなどの他の型は並べ替えされないまま返されます)。 この自動並べ替え順は、ascOrDesc パラメーターに ck ascending あるいは ck descending 定数を渡すことで変更できます (以下参照)。

また、引数を渡すことで、コレクション要素をどのように並べ替えるかを指定することもできます。 次の 3つのシンタックスがサポートされています:

  • pathStrings : Text (フォーミュラ)。 シンタックス: propertyPath1 {desc または asc}, propertyPath2 {desc または asc},... (デフォルトの並び順: asc)。 pathStrings はカンマで区切られた、1〜n のプロパティパスと並び順 (任意) で構成されたフォーミュラを格納します。 プロパティを渡す順番が、コレクション要素の並べ替えの優先順位を決定します。 デフォルトでは、プロパティは昇順に並べ替えられます。 並び順を設定するには、プロパティパスの後に半角スペースで区切ったあとに、昇順を指定するには "asc"、降順を指定するには "desc" を渡します。

  • pathObjects : Collection。 pathObjects コレクションには必要な数だけオブジェクトを追加することができます。 デフォルトでは、プロパティは昇順に並べ替えられます ("descending" は false)。 コレクションの各要素は、以下の構造を持つオブジェクトを格納します:

{
"propertyPath": string,
"descending": boolean
}
  • ascOrDesc : Integer。 Objects and collections テーマから、以下の定数のいずれか一つを渡します:

    定数タイプ説明
    ck ascendingLongint0要素は昇順に並べられます (デフォルト)
    ck descendingLongint1要素は降順に並べられます

    このシンタックスは、コレクション内のスカラー値のみを並べ替えます (オブジェクトやコレクションなどの他の型は並べ替えされないまま返されます)。

コレクションが異なる型の要素を格納している場合、それらはまず型ごとにグループ分けされ、そのあとで並べ替えられます。 型は以下の順番で返されます:

  1. null
  2. ブール
  3. 文字列
  4. 数値
  5. オブジェクト
  6. コレクション
  7. 日付

例題 1

数値のコレクションを昇順および降順に並べ替えます:

 var $c; $c2; $3 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(Random)
End for
$c2:=$c.orderBy(ck ascending)
$c3:=$c.orderBy(ck descending)

例題 2

オブジェクトのコレクションを、テキストフォーミュラに指定したプロパティ名に基づいて並べ替えます:

 var $c; $c2 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$c2:=$c.orderBy("value desc")
$c2:=$c.orderBy("value desc, id")
$c2:=$c.orderBy("value desc, id asc")

オブジェクトのコレクションをプロパティパスで並べ替えます:

 var $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))

$c2:=$c.orderBy("phones.p1 asc")

例題 3

オブジェクトのコレクションを、pathObjects コレクションを使用して並べ替えます:

 var $crit; $c; $c2 : Collection
$crit:=New collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$crit.push(New object("propertyPath";"value";"descending";True))
$crit.push(New object("propertyPath";"id";"descending";False))
$c2:=$c.orderBy($crit)

プロパティパスで並べ替えます:

 var $crit; $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))
$crit:=New collection(New object("propertyPath";"phones.p2";"descending";True))
$c2:=$c.orderBy($crit)

.orderByMethod()

履歴
バージョン内容
v19 R6フォーミュラをサポート
v16 R6追加

.orderByMethod( formula : 4D.Function { ; ...extraParam : expression } ) : Collection
.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection

引数タイプ説明
formula4D.Function->フォーミュラオブジェクト
methodNameText->メソッド名
extraParamany->渡す引数
戻り値Collection<-並べ替えられたコレクションのコピー (シャロウ・コピー)

|

説明

.orderByMethod() 関数は、 formula フォーミュラまたは methodName メソッドを通して定義された順番でコレクション要素を並べ替えた新しいコレクションを返します。

この関数は シャロウ・コピー を返します。つまり、元のコレクションにオブジェクト要素やコレクション要素が含まれていた場合、それらの参照は戻り値のコレクションで共有されます。 また、元のコレクションが共有コレクションであった場合、返されるコレクションもまた共有コレクションになります。

このコマンドは、元のコレクションを変更しません。

次のいずれかを使用して、コレクション要素を評価するために実行されるコールバックを指定します:

  • formula (推奨シンタックス)、関数やプロジェクトメソッドを含むあらゆる実行可能な式を格納できる Formula オブジェクト
  • または methodName、プロジェクトメソッドの名前 (テキスト)。

コールバックには、二つの値を比較して、最初の値が二つ目の値より低い場合に true を返すコードの名称を渡します。 必要に応じて、 extraParam に指定した引数をコールバックに渡せます。

コールバックは以下の引数を受け取ります:

  • $1 (オブジェクト):
    • $1.value (任意の型): 比較する一つ目の要素の値
    • $1.value2 (任意の型): 比較する二つ目の要素の値
    • $2...$N (任意の型): 追加の引数

メソッドを使用する場合、以下の引数を設定する必要があります:

  • $1.result (ブール): $1.value < $1.value2 の場合は true、それ以外は false

例題 1

文字列のコレクションをアルファベット順ではなく、数値順に並べ替えます:

 var $c; $c2; $c3 : Collection
$c:=New collection
$c.push("33";"4";"1111";"222")
$c2:=$c.orderBy() //$c2=["1111","222","33","4"], アルファベット順
$c3:=$c.orderByMethod(Formula(Num($1.value)<Num($1.value2))) // $c3=["4","33","222","1111"]

例題 2

文字列のコレクションを、文字列の長さを基準に並べ替えます:

 var $fruits; $c2 : Collection
$fruits:=New collection("Orange";"Apple";"Grape";"pear";"Banana";"fig";"Blackberry";"Passion fruit")
$c2:=$fruits.orderByMethod(Formula(Length(String($1.value))>Length(String($1.value2))))
//$c2=[Passion fruit,Blackberry,Orange,Banana,Apple,Grape,pear,fig]

例題 3

文字コード順またはアルファベット順にコレクション要素を並べ替えます:

var $strings1; $strings2 : Collection
$strings1:=New collection("Alpha";"Charlie";"alpha";"bravo";"Bravo";"charlie")

// 文字コード順:
$strings2:=$strings1.orderByMethod(Function(sortCollection);sk character codes)
// 結果 : ["Alpha","Bravo","Charlie","alpha","bravo","charlie"]

// アルファベット順:
$strings2:=$string1s.orderByMethod(Function(sortCollection);sk strict)
// 結果 : ["alpha","Alpha","bravo","Bravo","charlie","Charlie"]

sortCollection メソッドのコードは以下のとおりです:

var $1 : Object
var $2: Integer // 並べ替えオプション
$1.result:=(Compare strings($1.value;$1.value2;$2)<0)

.pop()

履歴
バージョン内容
v16 R6追加

.pop() : any

引数タイプ説明
戻り値any<-コレクションの最後の要素

|

説明

.pop() 関数は、 コレクションから最後の要素を取り除き、それを戻り値として返します。

このコマンドは、元のコレクションを変更します。

空のコレクションに適用した場合、 .pop()Undefined を返します。

例題

.pop().push() と組み合わせて使用すると、スタック (後入れ先出し構造) を実装することができます:

 var $stack : Collection
$stack:=New collection //$stack=[]
$stack.push(1;2) //$stack=[1,2]
$stack.pop() //$stack=[1] 、戻り値は 2 です
$stack.push(New collection(4;5)) //$stack=[[1,[4,5]]
$stack.pop() //$stack=[1] 、戻り値は [4,5] です
$stack.pop() //$stack=[] 、戻り値は 1 です

.push()

履歴
バージョン内容
v16 R6追加

.push( element : any { ;...elementN } ) : Collection

引数タイプ説明
elementMixed->コレクションに追加する要素
戻り値Collection<-要素の追加された元のコレクション

|

説明

.push() 関数は、 一つ以上の element 引数をコレクションインスタンスの最後に追加し、変更された元のコレクションを返します。

このコマンドは、元のコレクションを変更します。

例題 1

 var $col : Collection
$col:=New collection(1;2) //$col=[1,2]
$col.push(3) //$col=[1,2,3]
$col.push(6;New object("firstname";"John";"lastname";"Smith"))
//$col=[1,2,3,6,{firstname:John,lastname:Smith}

例題 2

戻り値のコレクションを並び替えます:

 var $col; $sortedCol : Collection
$col:=New collection(5;3;9) //$col=[5,3,9]
$sortedCol:=$col.push(7;50).sort()
//$col=[5,3,9,7,50]
//$sortedCol=[3,5,7,9,50]

.query()

履歴
バージョン内容
v17 R5querySettings をサポート
v16 R6追加

.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection

引数タイプ説明
queryStringText->検索条件
valueMixed->プレースホルダー使用時: 比較する値
querySettingsObject->クエリオプション: parameters, attributes 他
戻り値Collection<-queryString に合致するコレクション要素

|

説明

.query() 関数は、 検索条件に合致するオブジェクトコレクションの要素をすべて返します 。検索条件は、queryString および、任意の valuequerySettings パラメーターによって定義されます。 また、元のコレクションが共有コレクションであった場合、返されるコレクションもまた共有コレクションになります。

このコマンドは、元のコレクションを変更しません。

queryString 引数には、以下のシンタックスを使用します:

propertyPath 比較演算子 値 {logicalOperator propertyPath 比較演算子 値}

queryString および valuequerySettings パラメーターを使ってクエリをビルドする方法の詳細については、DataClass.query() 関数を参照ください。

queryString 引数および formula オブジェクト引数の使用に関わらず、フォーミュラは collection.query() 関数でサポートされていません。

例題 1

 var $c; $c2; $c3 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.query("name = :1";"Cleveland") //$c2=[{name:Cleveland,zc:35049}]
$c3:=$c.query("zc > 35040") //$c3=[{name:Cleveland,zc:35049},{name:Clanton,zc:35046},{name:Clanton,zc:35045}]

例題 2

 var $c : Collection
$c:=New collection
$c.push(New object("name";"Smith";"dateHired";!22-05-2002!;"age";45))
$c.push(New object("name";"Wesson";"dateHired";!30-11-2017!))
$c.push(New object("name";"Winch";"dateHired";!16-05-2018!;"age";36))

$c.push(New object("name";"Sterling";"dateHired";!10-5-1999!;"age";Null))
$c.push(New object("name";"Mark";"dateHired";!01-01-2002!))

上記のオブジェクトに対し、以下のクエリは名前に "in" が含まれている人物を返します:

 $col:=$c.query("name = :1";"@in@")
//$col=[{name:Winch...},{name:Sterling...}]

以下のクエリは、変数に格納した文字列 (ユーザーが入力した文字列など) から名前が始まらない人物を返します:

 $col:=$c.query("name # :1";$aString+"@")
//if $astring="W"
//$col=[{name:Smith...},{name:Sterling...},{name:Mark...}]

以下のクエリは、年齢が不明な (プロパティが null あるいは undefined に設定されている) 人物を返します:

 $col:=$c.query("age=null") // "null" ではプレースホルダーは使えません
//$col=[{name:Wesson...},{name:Sterling...},{name:Mark...}]

以下のクエリは、採用から90日を超えている人物を返します:

 $col:=$c.query("dateHired < :1";(Current date-90))
//$col=[{name:Smith...},{name:Sterling...},{name:Mark...}] (今日が 01/10/2018 の場合)

例題 3

追加のクエリ例については、dataClass.query() を参照してください。

.reduce()

履歴
バージョン内容
v19 R6フォーミュラをサポート
v16 R6追加

.reduce( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduce( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any

引数タイプ説明
formula4D.Function->フォーミュラオブジェクト
methodNameText->メソッド名
initValueText, Number, Object, Collection, Date, Boolean->formula または methodName の最初の呼び出しに最初の引数として使用する値
param->渡す引数
戻り値Text, Number, Object, Collection, Date, Boolean<-アキュムレーター値の結果

|

説明

.reduce() 関数は、 formula または methodName コールバックをアキュムレーターおよびコレクションの各要素に (左から右へ) 適用して、単一の値にまとめます。

このコマンドは、元のコレクションを変更しません。

次のいずれかを使用して、コレクション要素を評価するために実行されるコールバックを指定します:

  • formula (推奨シンタックス)、関数やプロジェクトメソッドを含むあらゆる実行可能な式を格納できる Formula オブジェクト
  • または methodName、プロジェクトメソッドの名前 (テキスト)。

コールバックはコレクションの各要素を受け取り、任意の処理を実行して、結果を $1.accumulator に蓄積します。この値は最終的に $1.value に返されます。

initValue に引数を渡すことで、アキュムレーターを初期化することができます。 省略された場合は、$1.accumulatorUndefined から開始されます。

コールバックは以下の引数を受け取ります:

  • $1.value: 処理する要素の値
  • in $2: param
  • in $N...: paramN...

コールバックは以下のパラメータを設定します:

  • $1.accumulator: メソッドで変更する値。initValue によって初期化します。
  • $1.stop (ブール、任意): メソッドコールバックを止める場合には true。 返された値は最後に計算されたものです。

例題 1

var $c : Collection
$c:=New collection(5;3;5;1;3;4;4;6;2;2)
$r:=$c.reduce(Formula($1.accumulator:=$1.accumulator*$1.value); 1) // 戻り値は 86400 です

例題 2

複数のコレクション要素を単一の値にまとめます:

 var $c;$r : Collection
$c:=New collection
$c.push(New collection(0;1))
$c.push(New collection(2;3))
$c.push(New collection(4;5))
$c.push(New collection(6;7))
$r:=$c.reduce(Formula(Flatten)) //$r=[0,1,2,3,4,5,6,7]

Flatten メソッドのコードは以下のとおりです:

 If($1.accumulator=Null)
$1.accumulator:=New collection
End if
$1.accumulator.combine($1.value)

.remove()

履歴
バージョン内容
v16 R6追加

.remove( index : Integer { ; howMany : Integer } ) : Collection

引数タイプ説明
indexInteger->削除を開始する要素の位置
howManyInteger->削除する要素の数、省略時は 1要素を削除
戻り値Collection<-要素が削除された元のコレクション

|

説明

.remove() 関数は、 index で指定した位置から一つまた複数のコレクション要素を削除し、変更されたコレクションを返します。

このコマンドは、元のコレクションを変更します。

index パラメーターには、削除するコレクション要素の位置を渡します。

警告: コレクション要素は 0 起点である点に注意してください。 指定した index がコレクションの length より大きい場合、実際の開始インデックスはコレクションの length に設定されます。

  • index < 0 の場合、index:=index+length として再計算されます (コレクションの終端からのオフセットであるとみなされます)。
  • 計算結果も負の値である場合、index は 0 に設定されます。
  • 計算結果がコレクションの length より大きい場合には、index は length に設定されます。

howMany には、index の位置から削除する要素の数を渡します。 howMany が省略された場合、1つの要素のみが削除されます。

空のコレクションから要素を削除しようとした場合、関数は何もしません (エラーは生成されません)。

例題

 var $col : Collection
$col:=New collection("a";"b";"c";"d";"e";"f";"g";"h")
$col.remove(3) // $col=["a","b","c","e","f","g","h"]
$col.remove(3;2) // $col=["a","b","c","g","h"]
$col.remove(-8;1) // $col=["b","c","g","h"]
$col.remove(-3;1) // $col=["b","g","h"]

.resize()

履歴
バージョン内容
v16 R6追加

.resize( size : Integer { ; defaultValue : any } ) : Collection

引数タイプ説明
sizeInteger->コレクションの新しいサイズ
defaultValueNumber, Text, Object, Collection, Date, Boolean->新規要素のデフォルト値
戻り値Collection<-リサイズされた元のコレクション

|

説明

.resize() 関数は、 コレクションの length を引数で指定されたサイズに設定し、変更された元のコレクションを返します。

このコマンドは、元のコレクションを変更します。

  • size < lengthの場合、余分な要素はコレクションから削除されます。
  • size > lengthの場合、不足分の要素がコレクションに追加されます。

デフォルトで、新規要素には null 値が格納されます。 defaultValue に引数を渡すことで、新規要素の値を指定することができます。

例題

 var $c : Collection
$c:=New collection
$c.resize(10) // $c=[null,null,null,null,null,null,null,null,null,null]

$c:=New collection
$c.resize(10;0) // $c=[0,0,0,0,0,0,0,0,0,0]

$c:=New collection(1;2;3;4;5)
$c.resize(10;New object("name";"X")) //$c=[1,2,3,4,5,{name:X},{name:X},{name:X},{name:X},{name:X}]

$c:=New collection(1;2;3;4;5)
$c.resize(2) //$c=[1,2]

.reverse()

履歴
バージョン内容
v16 R6追加

.reverse( ) : Collection

引数タイプ説明
戻り値Collection<-逆順に要素を格納した新しいコレクション

|

説明

.reverse() 関数は、 全要素が逆順になった、コレクションのディープ・コピーを返します。 また、元のコレクションが共有コレクションであった場合、返されるコレクションもまた共有コレクションになります。

このコマンドは、元のコレクションを変更しません。

例題

 var $c; $c2 : Collection
$c:=New collection(1;3;5;2;4;6)
$c2:=$c.reverse() //$c2=[6,4,2,5,3,1]

.shift()

履歴
バージョン内容
v16 R6追加

.shift() : any

引数タイプ説明
戻り値any<-コレクションの先頭要素

|

説明

.shift() 関数は、 コレクションの先頭要素を取り除き、それを戻り値として返します。

このコマンドは、元のコレクションを変更します。

コレクションが空の場合、 関数はなにもしません。

例題

 var $c : Collection
var $val : Variant
$c:=New collection(1;2;4;5;6;7;8)
$val:=$c.shift()
// $val=1
// $c=[2,4,5,6,7,8]

.slice()

履歴
バージョン内容
v16 R6追加

.slice( startFrom : Integer { ; end : Integer } ) : Collection

引数タイプ説明
startFromInteger->開始インデックス (含まれる)
endInteger->終了インデックス (含まれない)
戻り値Collection<-抜粋要素を格納した新しいコレクション(シャロウ・コピー)

|

説明

.slice() 関数は、 コレクションの一部を、新しいコレクションとして返します。抜粋するのは、startFrom の位置 (含まれる) から end の位置 (含まれない) までの要素です。 この関数は シャロウ・コピー を返します。 また、元のコレクションが共有コレクションであった場合、返されるコレクションもまた共有コレクションになります。

このコマンドは、元のコレクションを変更しません。

戻り値のコレクションには、startFrom 引数で指定した要素 (含まれる) から、end 引数で指定した要素まで (含まれない) の全要素が格納されます。 startFrom 引数のみを渡した場合には、startFrom 引数で指定した要素から最後の要素までが戻り値のコレクションに格納されます。

  • startFrom < 0 の場合、startFrom:=startFrom+length として再計算されます (コレクションの終端からのオフセットであるとみなされます)。
  • 再計算された値も負の値だった場合、startFrom は 0 に設定されます。
  • end < 0 の場合、それは end:=end+length として再計算されます。
  • 渡された値、あるいは再計算された値が end < startFrom の場合、関数はなにもしません。

例題

 var $c; $nc : Collection
$c:=New collection(1;2;3;4;5)
$nc:=$c.slice(0;3) //$nc=[1,2,3]
$nc:=$c.slice(3) //$nc=[4,5]
$nc:=$c.slice(1;-1) //$nc=[2,3,4]
$nc:=$c.slice(-3;-2) //$nc=[3]

.some()

履歴
バージョン内容
v19 R6フォーミュラをサポート
v16 R6追加

.some( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Boolean
.some( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Boolean

引数タイプ説明
startFromInteger->テストを開始するインデックス
formula4D.Function->フォーミュラオブジェクト
methodNameText->メソッド名
paramMixed->渡す引数
戻り値Boolean<-少なくとも一つの要素がテストをパスすれば true

|

説明

.some() 関数は、 少なくとも一つのコレクション要素が、formula または methodName に指定したコードで実装されたテストにパスした場合に true を返します。

次のいずれかを使用して、コレクション要素を評価するために実行されるコード (コールバック) を指定します:

  • formula (推奨シンタックス)、関数やプロジェクトメソッドを含むあらゆる実行可能な式を格納できる Formula オブジェクト
  • または methodName、プロジェクトメソッドの名前 (テキスト)。

コールバックには、param (任意) に指定した引数が渡されます。 引数の有無にかかわらず、コールバックは任意のテストを実行でき、テストを満たす要素に対しては true を返さなくてはなりません。 コールバックは最初のパラメータ ($1) に Object を受け取ります。

コールバックは以下の引数を受け取ります:

  • $1.value: 処理する要素の値
  • in $2: param
  • in $N...: paramN...

また、コールバックは以下のパラメータを設定できます:

  • (メソッドを使用する場合は必須) $1.result (ブール): 要素の値の評価が成功した場合には true 、それ以外は false
  • $1.stop (ブール、任意): メソッドコールバックを止める場合には true。 返された値は最後に計算されたものです。

.some() 関数は、true を返す最初のコレクション要素を発見すると、コールバックの呼び出しをやめて true を返します。

デフォルトでは、.some() はコレクション全体をテストします。 オプションとして、startFrom 引数を渡すことで、テストを開始するコレクション要素のインデックスを指定することができます。

  • startFrom がコレクションの length 以上だった場合、false が返されます。これはコレクションがテストされていないことを意味します。
  • startFrom < 0 の場合には、コレクションの終わりからのオフセットであるとみなされます。
  • startFrom = 0 の場合、コレクション全体がテストされます (デフォルト)。

例題

コレクション要素のうち、>0 の値が少なくとも 1つあるかどうかを確認します。

 var $c : Collection
var $b : Boolean
$c:=New collection
$c.push(-5;-3;-1;-4;-6;-2)
$b:=$c.some(Formula($1.value>0)) // $b=false
$c.push(1)
$b:=$c.some(Formula($1.value>0)) // $b=true

$c:=New collection
$c.push(1;-5;-3;-1;-4;-6;-2)
$b:=$c.some(Formula($1.value>0)) //$b=true
$b:=$c.some(1;Formula($1.value>0)) //$b=false

.sort()

履歴
バージョン内容
v19 R6フォーミュラをサポート
v16 R6追加

.sort( formula : 4D.Function { ; ...extraParam : any } ) : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection

引数タイプ説明
formula4D.Function->フォーミュラオブジェクト
methodNameText->メソッド名
extraParamany->methodName に渡す引数
戻り値Collection<-並べ替えられた元のコレクション

|

説明

.sort() 関数は、 コレクションの要素を並べ替え、並べ替えられた元のコレクションを返します 。

このコマンドは、元のコレクションを変更します。

引数もなしに呼び出された場合、.sort() はスカラー値 (数値、テキスト、日付、ブール) のみを並べ替えます。 デフォルトでは、要素はそれぞれの型に応じて昇順で並べ替えられます。

カスタマイズされた順番や、型に関係なくコレクション要素を並べ替えたい場合には、二つの値を比較して、最初の値が二つ目の値より低い場合に true を返す比較コールバックを formula (Formula オブジェクト) または methodName (テキスト) に渡します。 必要に応じて、 追加の引数をコールバックに渡せます。

コールバックは以下の引数を受け取ります:

  • $1 (オブジェクト):
    • $1.value (任意の型): 比較する一つ目の要素の値
    • $1.value2 (任意の型): 比較する二つ目の要素の値
  • $2...$N (任意の型): 追加の引数

メソッドを使用する場合、以下の引数を設定する必要があります:

  • $1.result (ブール): $1.value < $1.value2 の場合は true、それ以外は false.

コレクションが異なる型の要素を格納している場合、それらはまず型ごとにグループ分けされ、そのあとで並べ替えられます。 型は以下の順番で返されます:

  1. null
  2. ブール
  3. 文字列
  4. 数値
  5. オブジェクト
  6. コレクション
  7. 日付

例題 1

 var $col; $col2 : Collection
$col:=New collection("Tom";5;"Mary";3;"Henry";1;"Jane";4;"Artie";6;"Chip";2)
$col2:=$col.sort() // $col2=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]
// $col=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]

例題 2

 var $col; $col2 : Collection
$col:=New collection(10;20)
$col2:=$col.push(5;3;1;4;6;2).sort() //$col2=[1,2,3,4,5,6,10,20]

例題 3

var $col; $col2; $col3 : Collection
$col:=New collection(33;4;66;1111;222)
$col2:=$col.sort() // 数値順: [4,33,66,222,1111]
$col3:=$col.sort(Formula(String($1.value)<String($1.value2))) // アルファベット順: [1111,222,33,4,66]

.sum()

履歴
バージョン内容
v16 R6追加

.sum( { propertyPath : Text } ) : Real

引数タイプ説明
propertyPathText->計算に使用するオブジェクトプロパティのパス
戻り値Real<-コレクション要素の値の合計

|

説明

.sum() 関数は、 コレクションインスタンスの全要素の値を合計して返します。

計算の対象となるのは数値のみです (他の型の要素は無視されます)。

コレクションがオブジェクトを格納している場合には、計算するオブジェクトプロパティのパスを propertyPath に渡します。

.sum() は以下の場合には 0 を返します:

  • コレクションが空の場合
  • コレクションに数値が含まれていない場合
  • propertyPath 引数で指定したパスがコレクション内で見つからない場合

例題 1

 var $col : Collection
var $vSum : Real
$col:=New collection(10;20;"Monday";True;2)
$vSum:=$col.sum() //32

例題 2

 var $col : Collection
var $vSum : Real
$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,5))
$vSum:=$col.sum("salary") //$vSum=70500,5

.unshift()

履歴
バージョン内容
v16 R6追加

.unshift( value : any { ;...valueN : any } ) : Collection

引数タイプ説明
valueText, Number, Object, Collection, Date->コレクションの先頭に挿入する値
戻り値Real<-要素の追加された元のコレクション

|

| | | |

説明

.unshift() 関数は、 一つ以上の value 引数をコレクションインスタンスの先頭に挿入します 。戻り値は、変更された元のコレクションです。

このコマンドは、元のコレクションを変更します。

複数の値が渡された場合、それらは一度に挿入されます。つまり、引数の順番と同じ順番で変更後のコレクションに格納されます。

例題

 var $c : Collection
$c:=New collection(1;2)
$c.unshift(4) // $c=[4,1,2]
$c.unshift(5) //$c=[5,4,1,2]
$c.unshift(6;7) // $c=[6,7,5,4,1,2]