ホームページ  >  記事  >  バックエンド開発  >  json 内の関連する数値を見つけるプログラム?

json 内の関連する数値を見つけるプログラム?

PHP中文网
PHP中文网オリジナル
2016-10-17 09:30:12999ブラウズ

質問

str={'Tom':'1,2,3','Jack':'1,5,9','Bob':'2','Li':'2,7'}

トムの数字で1が見つかったら、ジャックの5と9をトムに渡してください
トムの数字で2が見つかったら、リーの7をトムに渡してください、ボブは2だけを持っていて、それ以外は持っていません。数字なので彼はそれを与えることができません
トムの数字に 3 が見つかりましたが、ジャック、ボブ、リーは 3 を持っていないので、彼はそれを与えることができません
...
最後に、次の結果が得られました。

str_related={'Tom':'5,9,7','Jack':'2,3','Bob':'1,3,7','Li':'1,3'}

いいえ、説明がわかりやすいのはわかりますか?

実際の状況: 人はたくさんいて、少なくとも 10,000 人、その数は少なくとも 100,000 です

このプログラムを効率的に書くにはどうすればよいでしょうか?ありがとうございます

答え1:はこのように分割できます

const objLast = {}
const tempTom = []
const tom = str['Tom'].solit(',')
tom.map((item, i)=> {
  for(let key in str) {
     if(key != 'Tom') {
        tempTom.concact(getLastOfArr(str[key].split(','), item))
     }
  }
})
objLast.Tom = tempTom.join()
 function getLastOfArr(arr, removeKey) {
   return arr.filter((item, index) => {
        item != removeKey
    })
 }

パラメータが確かかどうか分からないので、おそらくこのように書いたと思います

後で知りましたが、あなたが望んでいたものはこれは php で書かれ、私のものは js でした。書き方については、アイデアをご覧ください~~~~

答え 2: python3 set

data = {'Tom':{1,2,3},'Jack':{1,5,9},'Bob':{2},'Li':{2,7}}
rslt = {}
for k in data:
    s=set()
    for x in data:
        if k!=x:
            s |= data[k]&data[x] and data[x]-data[k]
    rslt[k] = s
print(rslt)

結果:

{'Jack': {2, 3}, 'Tom': {9, 5, 7}, 'Li': {1, 3}, 'Bob': {1, 3, 7}}

最適化~

最初に計算して有効なセットを保存し、不必要な繰り返し計算を避けます。

りー
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。