こんにちは、にいるです。
Savepoオリジナルの開発初心者向けプログラム「Sink it」です。
今回で第9回目、題材はコレクションの1つ「Set」です。
この記事は「9.Setを使ってみよう」の解説と解答です。
1.Setとは
Setとはコレクションの1つです。
Listと反して、順序づけがないコレクションです。
そして値の重複を許さないコレクションです。
Listと比較してみますね。
こちらが取引先のListです。
# | 0 | 1 | 2 | 3 | 4 |
要素 | 取引先1 | 取引先2 | 取引先3 | 取引先4 | 取引先5 |
こちらが取引先のSetです。
要素 | 取引先1 | 取引先2 | 取引先3 | 取引先4 | 取引先5 |
そう、テーブルで見たときにナンバリングがありません。
なので、Setを参照するときは直接、項目や値を条件に指定する必要があります。
2.解答・解説
解答です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Id型のSetを用意 Set<Id> accSet1 = new Set<Id>(); Set<Id> accSet2 = new Set<Id>(); // 取引先レコードを一件だけ取得 Account acc = [SELECT Id FROM Account LIMIT 1]; // Setに取得した取引先レコードのIDを代入する accSet1.add(acc.Id); accSet1.add(acc.Id); accSet1.add(acc.Id); accSet1.add(acc.Id); accSet1.add(acc.Id); System.debug(accSet1.size()); // for文を回して代入してみるパターン for (Integer i = 1; i < 6; i++ ){ accSet2.add(acc.Id); System.debug('for文' + i + '回目 = ' + accSet2.size()); } |
■デバッグ
今回もちょっと難しいかもしれません。
Setへの代入にaddやsize、SOQLを使用しているので、そこの知識が必要になります。
また第3回目で題材にしたfor文も使用しています。
ここでやっていることは、取引先のIdを確認したかったのでId型のSetを宣言しています。
そして、そのSetにSOQLで取得した取引先一件のIdを5回代入しています。
デバッグで確認した通り、代入は成功していますが、2回目以降は代入がされていないことが確認できます。
for文で回しましたが、各回数でも入っていないことが確認できました。
これは1回目で代入された同じId値がまた代入されようとして重複を削除された結果です。
値の重複をさせたくない処理が必要な時はSetを使うことをおすすめします。
3.まとめ
いかがでしたでしょうか。
コレクションは3つありますが、Listは必ず使用する(使用したい!)ため、メソッドも一度は目を通しておきましょう。
皆さんもぜひ色々と試してみてください。
他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。
ではでは!