回答編集履歴
1
分かりづらいと思われる記述を修正
answer
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
マスキングされたユニークな値を持つテーブルを自力で作成していくしか方法は無いように思います。愚直な例ですが、
|
2
2
|
|
3
|
-
1. 分かり易く処理対象を限定するために、`{meta_key, meta_value}`を1要素とする全データ、N件のテーブル st を作成する。
|
3
|
+
1. 分かり易く処理対象を限定するために、`{meta_key, meta_value}`を1要素とする全データ、N件のテーブル st を初期データとして作成する。
|
4
|
-
2. stを対象に、meta_keyの数、つまりN件分の処理を行う。ループカウンターをi とし、1...N 間ループする。
|
4
|
+
2. stを対象に、meta_keyの数、つまりN件分の処理を行う。ループカウンターを i として、1...N 間ループする。
|
5
5
|
2-1. st[i] の meta_value をもとに、最後の何文字かを `*`でマスクする。これを候補値 rv とする。
|
6
6
|
2-2. 候補値 rv が、テーブルst 内の st[i] 以外の要素に存在しないか確認する。
|
7
7
|
(a) 存在しない場合
|
8
|
-
ユニークな値であることが
|
8
|
+
ユニークな値であることが確定したので、st[i] の meta_value を rvにする。
|
9
9
|
(b) 既に存在する場合
|
10
|
-
候補値 rvはユニークではない
|
10
|
+
候補値 rvはユニークではないので、衝突しないであろう別の値に改変し、rvの値を再生成する。2-2へ戻る。
|
11
11
|
|
12
12
|
3. ループ終了。上記1,2で処理済のstの値は、meta_valueがマスキングされたユニークなデータとなる。
|
13
13
|
|
14
14
|
少なくとも個人的にはロジックだけの問題だと思いますので、コードでの例示は省きます。
|
15
|
-
また、上記で言うテーブルst のような要素のコレクションに対して、Javaで使い
|
15
|
+
また、上記で言うテーブルst のような要素のコレクションに対して、Javaで使い得るラムダ式を併用したような関数型プログラミングをすれば、よりスマートに見えるコードが書けるようにも思います。
|