コレクションでの計算

Deeplからの自動翻訳

平均合計、価格(税込み)の計算は、あらゆるビジネスアプリケーションで一般的なタスクです。コレクションは、一貫した方法でデータを集計する簡単な方法です。コレクションを使えば、この種の計算がとても簡単になります。コレクションメソッドがすべてを代行してくれるからです。

この記事は、4D v16 R6 で追加されたメソッドを使用してコレクションを操作する方法を紹介するシリーズの一部です。さらに詳しく知りたい方は、データベースサンプルをダウンロードしてください。このサンプルには、コレクションメソッドでできることを示す12の異なる例が含まれています

データベースの例コレクションを管理する

sum, average, min and max

コレクションに含まれるすべての値の合計を計算するには sum メソッドを使用します。


$col:=Newcollection(10000;50000;10500.5)
$vSum:=$col.sum()//$vSum=70500.5

// オブジェクトコレクション内のすべての要素の合計を計算
$col:=Newcollection("name"; "Smith"; "salary";10000)
$col.sum() // $vSum =$col.push(New object("name"; "Wesson"; "salary";50000))
$col.push(New object("name"; "Gross"; "salary";10500.5))
$vSum:=$col.sum("salary")//$vSum=70500.5

また、同じ名前のコレクションメソッドで、平均値最小値最大値も同様に計算できます。

この averageメソッドは、コレクションのすべての値の算術平均(平均)を返します。

$col:=Newcollection(10000;50000;10500.5)
$vAvg:=$col.average() // $vAvg=23500.16666667

このメソッドは、コレクション内のすべての値の算術平均(平均値)を返します。 minメソッドは、コレクション内の最小の値を持つ要素を返します。

$col:=Newcollection(10000;50000;10500.5)
$vMin:=$col.min() // $vMin=10000

メソッドは max メソッドは、コレクションの中で最も大きな値を持つ要素を返します。

$col:=Newcollection(10000;50000;10500.5)
$vMax:=$col.max() // $vMax=50000

コレクション内の要素を数える

コレクションに含まれる要素の数を知りたい場合は、単に count を使って非NULL要素の数を、そして length を使って要素の総数を求めます。

$col:=Newcollection(1;2;3;Null; "a"; "b";Null)
$length:=$col.length // $length=7 length は属性
$count:=$col.count()// $count=5 count はメソッドです。

また、特定の値がコレクションで使用された回数を数えるには、次のようにします。 countValues:

$col:=Newcollection(1;2;5;5;5;3;6;4)
$vCount:=$col.countValues(5)// $vCount=3

特殊な計算

他の2つのコレクションメソッドでは、コレクションのすべての要素にコールバックを適用することができます。基本的に、コールバックメソッドはあなたのプロジェクトのメソッドのひとつです。あなたがループを書く必要はありません。4Dがあなたのために処理してくれます。

この mapメソッドは、コレクションの各要素にコールバックを適用し、すべての新しい要素を含むコレクションを返します。たとえば、コレクション内の各数値の合計に対するパーセンテージを計算する必要がある場合は、map を使用すると簡単です。

$c:=Newcollection(1;4;9;10;20)
$c2:=$c.map("Percentage";$c.sum()).// use Percentage as call back method
//$c2=[2.27,9.09,20.45,22.73,45.45]

ここで、Percentageは以下のようなプロジェクトメソッドです。

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

この reduceメソッドは、アキュムレータとコレクション内の各要素(左から右へ)に対して コールバックを適用し、単一の要素に削減します。たとえば、いくつかの商品が混在するコレクションで、各商品の集計を計算したい場合があります。このとき reduceメソッドを使用すると、非常に簡単に計算できます。

$fruits:=Newcollection("banana"; "cherry"; "orange"; "apple"; "cherry"; "orange"; "apple"; "banana"; "cherry"; "orange"; "fig" )
$count:=$fruits.reduce("Tally";New object)// use Tally as call back method
//$count={バナナ:2,チェリー:3,オレンジ:3,リンゴ:2,イチジク:1}
となる。

ここで Tallyは以下のようなプロジェクトメソッドです。

// この名前の果物が既にアキュムレータコレクションに存在するかどうかを検索
If($1.accumulator[$1.value]#Null)
$1.accumulator[$1.value]:=$1.accumulator[$1.value]+1
Else
// まだ存在しない場合は新しい果物を作成
$1.accumulator[1.value]:=1
End if

Fabrice Mainguené
- Product Owner -Fabrice Mainguenéは、2016年11月に4D Programチームに参加しました。プロダクトオーナーとして、彼はユーザーストーリーを書き、それを機能仕様に変換する役割を担っています。CNAMでコンピュータサイエンスの学士号を取得した後、FabriceはWindev開発者として小さなソフトウェア出版社に入社しました。その後、彼は産業および貿易分野のさまざまな企業で、Windev および Web 開発者として、また新機能の技術アドバイザーとして働きました。