v16R4:コレクション型の要素の削除方法は?

お世話になります。

いろいろ試してみました。
要素の追加/変更はできることは確認しましたが、削除方法がわかりません。

よろしくお願いいたします。 :pray:

あと
ドキュメントのhttp://doc.4d.com/4Dv16R4/4D/16-R4/New-collection.301-3342875.ja.htmlNew collection>のJSON use local time セレクターの説明のSET DATABASE PARAMETER のリンクが正しくない様です。

ない様なのですが、lengthメソッドがあるので、追加でremoveとinsert、indexOf、addは必要かと思います。
ついでにset/getも。 :pray:

コレクション型は,OB S|GET ARRAYで内部的に使用されていた仕組みをAPIとしてランゲージに公開したものです。

その目的は「要素の型が定まっていない配列」という新しい変数タイプを提供することでした。

単独で使用できることに加え,オブジェクト型のプロパティとしても設定できることがおもな利点となっています。

宣言は,C_COLLECTIONで,ローカル・プロセス・インタープロセスのスコープが設定できます。

また,テキスト入力とサブフォーム(ウィジェット)であれば,データソースのタイプに設定することもできます。

なお,オブジェクト記法が有効にされていれば,フォームオブジェクトのデータソースにオブジェクト記法を使用することもできます。

例:

customer.name

参照カウントされた参照型なので,インスタンスはNew collectionで作成しますが,明示的なデストラクターはありません(CLEAR VARIABLEは使用できます)。インスタンスは,参照カウントがゼロになった時点で破棄されます。

オブジェクト型(New object)と同じように,作成と初期化を同時にしても構いません。OB SETがサポートするタイプであれば,セットができます。

$col:=New collection(33;“mike”)

導入の目的で限定的なので,現時点では制限もあります。

たとえば・・・

コレクション型のフィールドはありません
コレクションの配列はありません
プラグインの引数として渡すことはできません
演算子(+ - = #)は使用できません
(今のところ)内容を変更することはできません
リストボックスの列には使用できません
XMLコマンドにそのまま渡すことはできません
PHPに以下同文
SQLに以下同文
ピクチャメタデータに以下同文

これは,開発メモからの抄訳です。

内容を変更することだけ「今のところ」と前置きがあることに注目できます。

コレクション型の新設,互換性を崩す仕様の変更(Typeの返り値がIs objectからIs collectionに変わった)なので,本来であれば,メジャーバージョンアップグレードで行なうべきなのですが,今回,プレビュー(業界的にはドラフトAPIというのかもしれません)であるオブジェクト記法が使用できるようになったことに伴い,コレクション型も使用できるようになりました。

内容の変更も,近い将来に実現することが期待できると思います。

なお,コレクション型の要素としてのオブジェクト型あるいコレクション型は,オブジェクト型のプロパティと同じように,参照で渡されま。ですから,セットしてもコピーが作成されるわけではなく,元のオブジェクト型あるいコレクション型に対する参照が渡されるだけです。ですから,セットした後に,参照元で更新する,ということが可能です。

オブジェクト型のプロパティであるオブジェクト型を参照元で更新した場合,オブジェクト型が更新された,というフラグが立ちませんでした。

ですから,以下のようなコードを実行した場合,

//レコード作成

C_OBJECT($oSubObject)
OB SET($oSubObject;“Test”;100)
CREATE RECORD([Test])
OB SET([Test]TestObject;“MySubObject”;$oSubObject)
SAVE RECORD([Test])

//再度ロード

UNLOAD RECORD([Test])
LOAD RECORD([Test])

//レコード更新

$oSubObject:=OB Get([Test]TestObject;“MySubObject”;Is object)
OB SET($oSubObject;“Test”;200)
SAVE RECORD([Test])

直接「子」オブジェクトが更新されたので,「親」は更新されたという認識がなく,SAVE RECORDで上書きされません。これは仕様です。

これを避けるためには,更新した「子」を「親」にセットし直すか,オブジェクト記法で「子」にアクセスする必要があります。

コレクション型の内容にアクセスする場合にも,同様の点に注意することが必要です。

ご説明ありがとうございます。
現状ないのは理解しています。フィーチャリクエストでお願いします。 :pray:

コレクション要素の削除について

http://forums.4d.fr/Post//19725711/1/

メソッドについて

http://forums.4d.fr/Post//19725739/1/

ありがとうございます。 :pray: :pray:

コレクション要素の削除について

追伸:16R6でできるようになりました :mrgreen:

コレクションメソッドのhttp://doc.4d.com/4Dv16R6/4D/16-R6/collectionpop.301-3650365.ja.htmlpop()>, http://doc.4d.com/4Dv16R6/4D/16-R6/collectionshift.301-3690365.ja.htmlshift()> およびhttp://doc.4d.com/4Dv16R6/4D/16-R6/collectionremove.301-3646670.ja.htmlremove()>です。

サンプルDB: http://library.4d-japan.com/SAMPLE_DATABASES/4D/4D_v16R6/demo_dbs_hdi/