コレクションの結合とソート

Deeplからの自動翻訳

4D v16 R6 opens a wide range of possibilities to manage collections. M2つのコレクションを1つに統合する、クローンを作成する、あるいは単にコレクションを並べることは、メソッドを呼び出すのと同じくらい簡単です。例えば、2つのコレクションを連結したり、異なる値だけを保持したり、ソートしたりする必要があるときに、貴重な時間を節約することができます。

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

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

コレクションをコピーする

ディープコピー

この copy メソッドは、コレクションインスタンスのディープコピーを 返します。ディープコピーとは 、元のコレクション内のすべての要素が複製され、返されたコレクションといかなる参照も共有しないことを意味します。

以下の例では、ディープコピーを行うために copyメソッドを使用してディープコピーを実行すると、次のように新しい要素が追加されます。 $col2 (a copy of the first collection – $col). Aに追加されます。 $col2, however$col remains unchanged:

//create a collection
$col
:=Newcollection("a"; "b"; "c"; "d"; "e")
//最初のコレクションのディープコピーを
作る
$col2:=$col.Copy($col) //最初のコレクションに新しい要素を追加する。
copy($col)
//最初のコレクションのコピーに新しい要素を追加
$col2.push("f")
// $col=["a", "b", "c", "d, "e"]

// $col2=["a", "b", "c", "d, "e", "f"]
//新しい要素を追加

浅いコピー

コレクションの浅いコピーを作成する場合、元のコレクション内の要素は、返されたコレクションとその参照を共有します。例えば、コレクションを作成し、その典型的な浅いコピーを作成し、コピーに新しい要素を追加する場合 ($col2)$col$col2 は参照を共有しているため、元のコレクション ($col) にも変更が反映されます。

//create a collection
$col
:=Newcollection("a"; "b"; "c"; "d"; "e")
//最初のコレクションの浅いコピーを作る
$col2:=$col

//最初のコレクションのコピーに新しい要素を
追加
$col2.push("f")
// $col2=$col=["a", "b", "c", "d, "e", "f"]
.

コレクション内の一部の浅いコピーを作成するには slice メソッドを使用して、コレクションの一部の浅いコピーを作成できます。

//create a collection
$col
:=New collection("a"; "b"; "c"; "d"; "e")
// Copy from index 2 and stop at end of collection -1
$col2 :=$col.slice(2;-1)
//$col2=[c,d]

コレクションを結合する

2 つのコレクションを連結する場合は concat または combineメソッドを使用します。

メソッドを使用します。 concat メソッドは、2つのコレクションを連結した新しいコレクションを返します。

//create 2 collections
$col
:=Newcollection("a"; "b"; "c")
$col2:=Newcollection(1;2;3)
//2つのコレクションを結合して3番目のコレクションに
$col3:=$col.concat($col2)
//$col3=["a", "b", "c",1,2,3]
となる。

メソッドは、2 つのコレクションを連結した新しいコレクションを返します。 combine メソッドは、(パラメータで渡された)コレクションの各要素を元のコレクションの末尾に追加します。

//create 2 collections
$col
:=Newcollection("a"; "b"; "c")
$col2:=Newcollection(1;2;3)
//最初のコレクションの最後に2番目のコレクションを追加
$col.combine($col2)
//$col=[a", "b", "c",1,2,3]
.

このメソッドは distinct メソッドは、元のコレクションとは異なる (異なる) 値だけを含む新しいコレクションを作成します。

$col:=New collection("a"; "b"; "c"; "a"; "b"; "c"; "d"; "e")
$col2 :=$col.distinct()
//$col2=[a,b,c,d,e]

コレクションをソートする

コレクションをソートするには sort または orderByメソッドを使用します。は元のコレクションを変更します。 sort メソッドは元のコレクションを変更します。 orderBy は全く新しい (浅いコピー) でソートされたコレクションを返しますが、 元のコレクションを変更することはありません。

$col:=Newcollection("a"; "b"; "c"; "a"; "b"; "c"; "d"; "e")
$col2:=$col.
ORDERBY()$col2:=$col.orderBy()
//$col2=["a", "a", "b", "c", "d", "e"]

//$col=["a", "b", "c", "a", "b", "c", "d", "e"]

$col.sort()
//$col=["a", "a", "b", "c", "d", "e"]
$col=[c”, “d”, “e”, “c”, “c”, “c”, “c”, “c”, “e””

また、コレクションをソートするには sort または orderByMethodを使ってコレクションをソートすることもできますが、この場合はコールバックメソッドが必要です。

$col:=Newcollection("Orange"; "Apple"; "Grape"; "Pear"; "Banana"; "Fig"; "Blackberry"; "Passion fruit")
$col2:=$col.orderByMethod("WordLength")
//$col2=[Passion fruit,Blackberry,Orange,Banana,Apple,Grape,Pear,Fig]
$col.sort("WordLength")
//$col=[Passion fruit,Blackberry,Orange,Banana,Apple,Grape,Pear,Fig] //$col=[Passion fruit,Blackberry,Orange,Banana,Apple,Grape,P
ear,Fig] //[Passion fruit,Blackberry,Apple,Grape,Pear,Fig] $col2=”WordLength”

WordLengthコールバックメソッドがプロジェクトのメソッドの1つである場合。

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

最後に、コレクションを逆順にコピーするには、次のようにします。 reverse:

$col:=Newcollection(1;3;5;2;4;6)
$col2:=$col.reverse()
//$c2=[6,4,2,5,3,1]
とする。

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