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

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    コレクションを value 引数の値で満たし、同コレクションを返します。
.concat( value : any { ; ...valueN : any } ) : 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( methodName : Text { ;...param : any } ) : Boolean
.every( startFrom : Integer ; methodName : Text { ;...param : any } ) : Boolean
    コレクション内の全要素が、methodName に指定したメソッドで実装されたテストにパスした場合には true を返します
.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathOrTargetPathN : Text } ) : Collection
    元のオブジェクトのコレクションから、propertyPath 引数が指定するプロパティ値を抽出し、新しいコレクションに格納して返します
.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection
    一つ以上の element 引数をコレクションインスタンスの最後に追加し、変更された元のコレクションを返します
.filter( methodName : Text { ; ...param : any } ) : Collection    元のコレクション要素のうち、methodName メソッドの結果が true になる要素をすべて格納した新しいコレクションを返します 。
.find( methodName : Text { ; ...param : any } ) : any
.find( startFrom : Integer ; methodName : Text { ; ...param : any } ) : any
    methodName 引数のメソッドを各コレクション要素に適用して、true を返す最初の要素を返します
.findIndex( methodName : Text { ; ...param : any } ) : Integer
.findIndex( startFrom : Integer ; methodName : Text { ; ...param : any } ) : Integer
    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( methodName : Text { ; ...param : any } ) : Collection     元のコレクションの各要素に対して methodName メソッドを呼び出した結果に基づいた、新しいコレクションを作成します
.max( { propertyPath : Text } ) : any     コレクション内の最大値を持つ要素を返します
.min( { propertyPath : Text } ) : any     コレクション内の最小値を持つ要素を返します
.orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection
    コレクションの要素を指定順に並べ替えた新しいコレクションを返します
.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection     methodName メソッドを通して定義された順番でコレクション要素を並べ替えた新しいコレクションを返します
.pop() : any     コレクションから最後の要素を取り除き、それを戻り値として返します
.push( element : any { ;...elementN } ) : Collection     index で指定した位置から一つまた複数のコレクション要素を削除し、変更されたコレクションを返します
.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection
    returns a new collection with all elements of the original collection in reverse order
.reduce( methodName : Text ) : any
.reduce( methodName : Text ; initValue : any { ; ...param : expression } ) : any
    methodName コールバックをアキュムレーターおよびコレクションの各要素に (左から右へ) 適用して、単一の値にまとめます
.remove( index : Integer { ; howMany : Integer } ) : Collection     コレクションの先頭要素を取り除き、それを戻り値として返します
.resize( size : Integer { ; defaultValue : any } ) : Collection     コレクションの length を引数で指定されたサイズに設定し、変更された元のコレクションを返します
.reverse( ) : Collection     コレクションの要素を並べ替えます
.shift() : any    コレクションインスタンスの全要素の値を合計して返します
.slice( startFrom : Integer { ; end : Integer } ) : Collection    コレクションの一部を、新しいコレクションとして返します
.some( methodName : Text { ; ...param : any } ) : Boolean
.some( startFrom : Integer ; methodName : Text { ; ...param : any } ) : Boolean
    少なくとも一つのコレクション要素が、テストにパスした場合に true を返します
.sort() : Collection
.sort( ascOrDesc : Integer ) : 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

ParameterTypeDescription
valueNumber, Text, Date, Time, Boolean, Object, Collection, Picture, Pointer->Collection's value(s)
ResultCollection<-The new 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

ParameterTypeDescription
valueNumber, Text, Date, Time, Boolean, Object, Collection->Shared collection's value(s)
ResultCollection<-The new shared collection

説明

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

このコレクションに要素を追加する場合には Use...End use 構造でくくる必要があり、そうしない場合にはエラーが返されます。 ただし、push()map() などの関数を使用して要素を追加する場合は、自動で内部的に Use...End use が使用されるため、必要ありません。 ただし、属性の読み取りは Use...End use 構造の外側でも可能です。

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

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

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

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

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

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

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

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

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

例題

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

.average()

履歴
リリース内容
v16 R6追加

.average( {propertyPath : Text } ) : Real

ParameterTypeDescription
propertyPathText->Object property path to be used for calculation
ResultReal, Undefined<-Arithmetic mean (average) of collection values

説明

.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

ParameterTypeDescription
ResultCollection<-Original collection with all elements removed

説明

.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

ParameterTypeDescription
col2Collection->Collection to combine
indexInteger->Position to which insert elements to combine in collection (default=length+1)
ResultCollection<-Original collection containing combined element(s)

説明

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

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

デフォルトでは、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 : any } ) : Collection

ParameterTypeDescription
valueany->Value(s) to concatenate. If value is a collection, all collection elements are added to the original collection
ResultCollection<-New collection with value(s) added to the original 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()

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

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

ParameterTypeDescription
optionInteger->ck resolve pointers: resolve pointers before copying,
ck shared: return a shared collection
groupWithColCollection->Shared collection to be grouped with the resulting collection
groupWithObjObject->Shared object to be grouped with the resulting collection
ResultCollection<-Deep copy of the original collection

説明

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

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

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

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

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

データストア、データクラス、およびエンティティオブジェクトはコピーできません。 これらを対象に .copy() を呼び出すと、Null 値が返されます。

例題 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

ParameterTypeDescription
propertyPathText->Object property path to be used for calculation
ResultReal<-Number of elements in the collection

説明

.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

ParameterTypeDescription
valueText, Number, Boolean, Date, Object, Collection->Value to count
propertyPathText->Object property path to be used for calculation
ResultReal<-Number of occurrences of the value

説明

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

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

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

要素が検出されるためには、value 引数の型が要素の型と合致している必要があります。

内容

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

例題 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

ParameterTypeDescription
optionInteger->ck diacritical: diacritical evaluation ("A" # "a" for example)
propertyPathText->Path of attribute whose distinct values you want to get
ResultCollection<-New collection with only distinct values

説明

.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

ParameterTypeDescription
collection2Collection->Collection to compare
optionInteger->ck diacritical: diacritical evaluation ("A" # "a" for example)
ResultBoolean<-True if collections are identical, false otherwise

説明

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

注記
  • .equal() 関数は、コレクション内の文字列、ブール値、数値、および null型要素の等価性をチェックするだけです。 ネイティブオブジェクトの等価性はチェックされません。
  • null値の要素は undefined要素と同じとはみなされません。

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

例題

 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()

履歴
リリース内容
v16 R6追加

.every( methodName : Text { ;...param : any } ) : Boolean
.every( startFrom : Integer ; methodName : Text { ;...param : any } ) : Boolean

ParameterTypeDescription
startFromInteger->Index to start the test at
methodNameText->Name of the method to call for the test
paramMixed->Parameter(s) to pass to methodName
ResultBoolean<-True if all elements successfully passed the test

説明

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

methodName には、コレクション要素の評価に使用するメソッド名を渡します。 param には、必要に応じて引数を渡します (任意)。 methodName で指定したメソッドはどんな処理でも実行でき、引数はあってもなくても構いません。

methodName で指定したメソッドは以下の引数を受け取ります:

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

methodName で指定したメソッドでは、以下の引数を設定します:

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

.every() 関数は、$1.resultfalse を返すコレクション要素を発見すると、methodName メソッドの呼び出しをやめて false を返します。

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

  • 内容
  • startFrom < 0 の場合には、コレクションの終わりからのオフセットであるとみなされます(startFrom:=startFrom+length)。
  • startFrom = 0 の場合、コレクション全体がテストされます (デフォルト)。

例題 1

var $c : Collection  
var $b : Boolean
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every("NumberGreaterThan0") // true を返します
$c.push(-1)
$b:=$c.every("NumberGreaterThan0") // false を返します

NumberGreaterThan0 メソッドの中身は以下のとおりです:

$1.result:=$1.value>0

例題 2

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

var $c : Collection
var $b : Boolean
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every("TypeLookUp";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("TypeLookUp";Is real) //$b=false

TypeLookUp メソッドの中身は以下のとおりです:

#DECLARE ($toEval : Object ; $param : Integer) //$1; $2
If(Value type($toEval.value)=$param)
$toEval.result:=True
End if

.extract()

履歴
リリース内容
v16 R6追加

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

ParameterTypeDescription
propertyPathText->Object property path whose values must be extracted to the new collection
targetpathText->Target property path or property name
optionInteger->ck keep null: include null properties in the returned collection (ignored by default). Parameter ignored if targetPath passed.
ResultCollection<-New collection containing extracted values

説明

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

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

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

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

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

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

例題 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

ParameterTypeDescription
valuenumber, Text, Collection, Object, Date, Boolean->Filling value
startFromInteger->Start index (included)
endInteger->End index (not included)
Resultcollection<-Original collection with filled values

説明

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

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

  • 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()

履歴
リリース内容
v16 R6追加

.filter( methodName : Text { ; ...param : any } ) : Collection

ParameterTypeDescription
methodNameText->Name of the function to call to filter the collection
paramMixed->Parameter(s) to pass to methodName
ResultCollection<-New collection containing filtered elements (shallow copy)

説明

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

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

methodName には、コレクション要素の評価に使用するメソッド名を渡します。 param には、必要に応じて引数を渡します (任意)。 このメソッドは $1 にオブジェクトを受け取り、メソッドの条件を満たして新規コレクションに代入されるべき要素の $1.resulttrue に設定しなければなりません。

methodName で指定したメソッドは以下の引数を受け取ります:

  • $1.value: フィルターする要素の値
  • $2: param
  • $N...: param2...paramN

methodName で指定したメソッドでは、以下の引数を設定します:

  • $1.result (ブール): 要素の値がフィルターの条件に合致し、新コレクションに代入すべき場合に true
  • $1.stop (ブール、任意): メソッドコールバックを止める場合には true。 返された値は最後に計算されたものです。

例題 1

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

 var $col;$colNew : Collection
$col:=New collection("hello";"world";"red horse";66;"tim";"san jose";"miami")
$colNew:=$col.filter("LengthLessThan";6)
//$colNew=["hello","world","tim","miami"]

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

 C_OBJECT($1)
C_LONGINT($2)
If(Value type($1.value)=Is text)
$1.result:=(Length($1.value))<$2
End if

例題 2

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

 var $c;$c2;$c3 : Collection
$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("TypeLookUp";Is real) // $c2=[5,3,1,4,6,2]
$c3:=$c.filter("TypeLookUp";Is object)
// $c3=[{name:Cleveland,zc:35049},{name:Blountsville,zc:35031}]

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

 C_OBJECT($1)
C_LONGINT($2)
If(OB Get type($1;"value")=$2)


$1.result:=True
End if

.find()

履歴
リリース内容
v16 R6追加

.find( methodName : Text { ; ...param : any } ) : any
.find( startFrom : Integer ; methodName : Text { ; ...param : any } ) : any

ParameterTypeDescription
startFromInteger->Index to start the search at
methodNameText->Name of the function to call for the find
paramany->Parameter(s) to pass to methodName
Resultany<-First value found, or Undefined if not found

説明

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

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

methodName には、コレクション要素の評価に使用するメソッド名を渡します。 param には、必要に応じて引数を渡します (任意)。 このメソッドは $1 にオブジェクトを受け取り、条件を満たす最初の要素の $1.resulttrue に設定しなければなりません。

methodName で指定したメソッドは以下の引数を受け取ります:

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

methodName で指定したメソッドでは、以下の引数を設定します:

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

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

  • 内容
  • 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("LengthLessThan";5) //$value="tim"

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

 var $1 : Object
var $2 : Integer
If(Value type($1.value)=Is text)
$1.result:=(Length($1.value))<$2
End if

例題 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("FindCity";"Clanton") //$c2={name:Clanton,zc:35046}

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

 var $1 : Object
var $2 : Text
$1.result:=$1.value.name=$2 // name は、コレクションのオブジェクト要素内のプロパティ名です

.findIndex()

履歴
リリース内容
v16 R6追加

.findIndex( methodName : Text { ; ...param : any } ) : Integer
.findIndex( startFrom : Integer ; methodName : Text { ; ...param : any } ) : Integer

ParameterTypeDescription
startFromInteger->Index to start the search at
methodNameText->Name of the function to call for the find
paramany->Parameter(s) to pass to methodName
ResultInteger<-Index of first value found, or -1 if not found

説明

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

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

methodName には、コレクション要素の評価に使用するメソッド名を渡します。 methodName で指定したメソッドはどんなテストでも実行でき、引数はあってもなくても構いません。 このメソッドは $1 にオブジェクトを受け取り、条件を満たす最初の要素の $1.resulttrue に設定しなければなりません。

methodName で指定したメソッドは以下の引数を受け取ります:

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

methodName で指定したメソッドでは、以下の引数を設定します:

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

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

  • 内容
  • 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("FindCity";"Clanton") // $val2=3
$val3:=$c.findIndex($val2+1;"FindCity";"Clanton") //$val3=4

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

 var $1 : Object
var $2 : Text
$1.result:=$1.value.name=$2

.indexOf()

履歴
リリース内容
v16 R6追加

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

ParameterTypeDescription
toSearchexpression->Expression to search in the collection
startFromInteger->Index to start the search at
ResultInteger<-Index of the first occurrence of toSearch in the collection, -1 if not found

説明

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

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

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

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

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

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

  • 内容
  • 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

ParameterTypeDescription
queryStringText->Search criteria
valueany->Value(s) to compare when using placeholder(s)
ResultCollection<-Element index(es) matching queryString in the collection

説明

.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

ParameterTypeDescription
indexInteger->Where to insert the element
elementany->Element to insert in the collection
ResultCollection<-Original collection containing inserted element

説明

.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

ParameterTypeDescription
delimiterText->Separator to use between elements
optionInteger->ck ignore null or empty: ignore null and empty strings in the result
ResultText<-String containing all elements of the collection, separated by delimiter

説明

.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

ParameterTypeDescription
toSearchexpression->The element that is to be searched for within the collection
startFromInteger->Index to start the search at
ResultInteger<-Index of last occurrence of toSearch in the collection, -1 if not found

説明

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

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

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

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

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

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

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

例題

 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()

履歴
リリース内容
v16 R6追加

.map( methodName : Text { ; ...param : any } ) : Collection

ParameterTypeDescription
methodNameText->Name of method used to transform the collection elements
paramany->Parameter(s) for the method
ResultCollection<-Collection of transformed values

説明

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

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

methodName には、コレクション要素の評価に使用するメソッド名を渡します。 methodName には、二つの値を比較して、最初の値が二つ目の値より低い場合に $1.resulttrue を返す比較メソッドの名称を渡します。

methodName で指定したメソッドは以下の引数を受け取ります:

  • $1.value (任意の型): マップする要素の値
  • in $2 (任意の型): param
  • in $N... (任意の型): paramN...

methodName で指定したメソッドでは、以下の引数を設定します:

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

例題

 var $c; $c2 : Collection
$c:=New collection(1;4;9;10;20)
$c2:=$c.map("Percentage";$c.sum())
//$c2=[2.27,9.09,20.45,22.73,45.45]

methodName で指定したメソッドは以下の引数を受け取ります:

 var $1 : Object
var $2 : Real
$1.result:=Round(($1.value/$2)*100;2)

.max()

履歴
リリース内容
v16 R6追加

.max( { propertyPath : Text } ) : any

ParameterTypeDescription
propertyPathText->Object property path to be used for evaluation
ResultBoolean, Text, Number, Collection, Object, Date<-Maximum value in the collection

説明

.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

ParameterTypeDescription
propertyPathText->Object property path to be used for evaluation
ResultBoolean, Text, Number, Collection, Object, Date<-Minimum value in the collection

説明

.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

ParameterTypeDescription
pathStringsText->Property path(s) on which to order the collection
pathObjectsCollection->Collection of criteria objects
ascOrDescInteger->ck ascending or ck descending (scalar values)
ResultCollection<-Ordered copy of the collection (shallow copy)

説明

.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 ascendingInteger0要素は昇順に並べられます (デフォルト)
ck descendingInteger1要素は降順に並べられます

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

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

  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")

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

 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

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

 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()

履歴
リリース内容
v16 R6追加

.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection

ParameterTypeDescription
methodNameText->Name of method used to specify the sorting order
extraParamexpression->Parameter(s) for the method
ResultCollection<-Sorted copy of the collection (shallow copy)

説明

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

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

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

カスタマイズされた順番や、型に関係なくコレクション要素を並べ替えたい場合には、二つの値を比較して、最初の値が二つ目の値より低い場合に $1.resulttrue を返す比較メソッドの名称を methodName に渡します。 必要であれば methodName に追加の引数を渡すこともできます。

  • methodName で指定したメソッドは以下の引数を受け取ります:
    • $1 (オブジェクト):
      • $1.value (任意の型): 比較する一つ目の要素の値
      • $1.value2 (任意の型): 比較する二つ目の要素の値
    • $2...$N (任意の型): 追加の引数
  • methodName で指定したメソッドでは、以下の引数を設定します:
    • $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("NumAscending") // $c3=["4","33","222","1111"]

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

 $1.result:=Num($1.value)<Num($1.value2)

例題 2

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

 var $fruits; $c2 : Collection
$fruits:=New collection("Orange";"Apple";"Grape";"pear";"Banana";"fig";"Blackberry";"Passion fruit")
$c2:=$fruits.orderByMethod("WordLength")
//$c2=[Passion fruit,Blackberry,Orange,Banana,Apple,Grape,pear,fig]

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

 $1.result:=Length(String($1.value))>Length(String($1.value2))

例題 3

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

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

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

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

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

var$1Object
var$2Integer // 並べ替えオプション

$1.result:=(Compare strings($1.value;$1.value2;$2)<0)

.pop()

履歴
リリース内容
v16 R6追加

.pop() : any

ParameterTypeDescription
Resultany<-Last element of collection

説明

.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

ParameterTypeDescription
elementMixed->Element(s) to add to the collection
ResultCollection<-Original collection containing added elements

説明

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

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

例題 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()

履歴
リリース内容
17 R5querySettings をサポート
v16 R6追加

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

ParameterTypeDescription
queryStringText->Search criteria
valueMixed->Value(s) to compare when using placeholder(s)
querySettingsObject->Query options: parameters, attributes
ResultCollection<-Element(s) matching queryString in the collection

説明

.reverse() 関数は、 returns a new collection with all elements of the original collection in reverse order 。 また、元のコレクションが共有コレクションであった場合、返されるコレクションもまた共有コレクションになります。

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

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

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

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

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()

履歴
リリース内容
v16 R6追加

.reduce( methodName : Text ) : any
.reduce( methodName : Text ; initValue : any { ; ...param : expression } ) : any

ParameterTypeDescription
methodNameText->Name of the function to call to process collection elements
initValueText, Number, Object, Collection, Date, Boolean->Value to use as the first argument to the first call of methodName
paramexpression->Parameter(s) to pass to methodName
ResultText, Number, Object, Collection, Date, Boolean<-Result of the accumulator value

説明

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

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

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

$1.accumulator: メソッドで変更する値。 initValue によって初期化します。

methodName で指定したメソッドは以下の引数を受け取ります:

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

methodName で指定したメソッドでは、以下の引数を設定します:

  • 説明
  • $1.stop (ブール、任意): メソッドコールバックを止める場合には true。 返された値は最後に計算されたものです。

例題 1

 C_COLLECTION($c)
$c:=New collection(5;3;5;1;3;4;4;6;2;2)
$r:=$c.reduce("Multiply";1) // 戻り値は 86400 です

methodName で指定したメソッドは以下の引数を受け取ります:

 If(Value type($1.value)=Is real)
$1.accumulator:=$1.accumulator*$1.value
End if

例題 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("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

ParameterTypeDescription
indexInteger->Element at which to start removal
howManyInteger->Number of elements to remove, or 1 element if omitted
ResultCollection<-Original collection without removed element(s)

説明

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

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

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

警告: コレクション要素は 0 起点である点に注意してください。 startFrom < 0 の場合には、コレクションの終わりからのオフセットであるとみなされます(startFrom:=startFrom+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

ParameterTypeDescription
sizeInteger->New size of the collection
defaultValueNumber, Text, Object, Collection, Date, Boolean->Default value to fill new elements
ResultCollection<-Resized original 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

ParameterTypeDescription
ResultCollection<-Inverted copy of the collection

説明

.sort() 関数は、 コレクションの要素を並べ替えます。 また、元のコレクションが共有コレクションであった場合、返されるコレクションもまた共有コレクションになります。

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

例題

 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

ParameterTypeDescription
Resultany<-First element of collection

説明

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

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

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

例題

 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

ParameterTypeDescription
startFromInteger->Start index (included)
endInteger->End index (not included)
ResultCollection<-New collection containing sliced elements (shallow copy)

説明

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

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

startFrom < 0 の場合には、コレクションの終わりからのオフセットであるとみなされます(startFrom:=startFrom+length)。 注: 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()

履歴
リリース内容
v16 R6追加

.some( methodName : Text { ; ...param : any } ) : Boolean
.some( startFrom : Integer ; methodName : Text { ; ...param : any } ) : Boolean

ParameterTypeDescription
startFromInteger->Index to start the test at
methodNameText->Name of the method to call for the test
paramMixed->Parameter(s) to pass to methodName
ResultBoolean<-True if at least one element successfully passed the test

説明

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

methodName には、コレクション要素の評価に使用するメソッド名を渡します。 param には、必要に応じて引数を渡します (任意)。 このメソッドは $1 にオブジェクトを受け取り、テストをパスした最初の要素の $1.resulttrue に設定しなければなりません。

methodName で指定したメソッドは以下の引数を受け取ります:

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

methodName で指定したメソッドでは、以下の引数を設定します:

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

.some() 関数は、$1.resulttrue を返す最初のコレクション要素を発見すると、methodName メソッドの呼び出しをやめて true を返します。

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

  • 引数に矛盾がある場合、次のように解釈されます:
  • startFrom < 0 の場合には、コレクションの終わりからのオフセットであるとみなされます。
  • startFrom = 0 の場合、コレクション全体がテストされます (デフォルト)。

例題

 var $c : Collection
var $b : Boolean
$c:=New collection
$c.push(-5;-3;-1;-4;-6;-2)
$b:=$c.some("NumberGreaterThan0") // 戻り値は false
$c.push(1)
$b:=$c.some("NumberGreaterThan0") // 戻り値は true

$c:=New collection
$c.push(1;-5;-3;-1;-4;-6;-2)
$b:=$c.some("NumberGreaterThan0") //$b=true
$b:=$c.some(1;"NumberGreaterThan0") //$b=false

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


$1.result:=$1.value>0

.sort()

履歴
リリース内容
v16 R6追加

.sort() : Collection
.sort( ascOrDesc : Integer ) : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection

ParameterTypeDescription
ascOrDescInteger->ck ascending or ck descending (scalar values)
methodNameText->Name of method used to specify the sorting order
extraParamany->Parameter(s) for the method
ResultCollection<-Original collection sorted

説明

.query() 関数は、 コレクションの要素を並べ替えます 。戻り値は並べ替えられた元のコレクションです。

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

引数もなしに呼び出された場合、.sort() はスカラー値 (数値、テキスト、日付、ブール) のみを並べ替えます。 デフォルトでは、要素はそれぞれの型に応じて昇順で並べ替えられます。 ascOrDesc 引数には、以下の定数のいずれか一つを渡すことができます:

|定数|  型|値|詳細|
|---|---|---|---|
|ck ascending|Integer|0|要素は昇順に並んでいます(デフォルト)|
|ck descending|Integer|1|要素は降順に並んでいます|

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

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

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

カスタマイズされた順番や、型に関係なくコレクション要素を並べ替えたい場合には、二つの値を比較して、最初の値が二つ目の値より低い場合に $1.resulttrue を返す比較メソッドの名称を methodName に渡します。 必要であれば methodName に追加の引数を渡すこともできます。

  • methodName で指定したメソッドは以下の引数を受け取ります:
    • $1 (オブジェクト):
      • $1.value (任意の型): 比較する一つ目の要素の値
      • $1.value2 (任意の型): 比較する二つ目の要素の値
    • $2...$N (任意の型): 追加の引数

methodName で指定したメソッドでは、以下の引数を設定します:

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

例題 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("numberOrder") // アルファベット順: [1111,222,33,4,66]
  // numberOrder プロジェクトメソッド
var $1 : Object
$1.result:=String($1.value)<String($1.value2)

.sum()

履歴
リリース内容
v16 R6追加

.sum( { propertyPath : Text } ) : Real

ParameterTypeDescription
propertyPathText->Object property path to be used for calculation
ResultReal<-Sum of collection values

説明

.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

ParameterTypeDescription
valueText, Number, Object, Collection, Date->Value(s) to insert at the beginning of the collection
ResultCollection<-Collection containing added element(s)

説明

.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]