首頁  >  文章  >  後端開發  >  json找到相關聯數字的程式?

json找到相關聯數字的程式?

PHP中文网
PHP中文网原創
2016-10-17 09:30:12999瀏覽

問題

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

在Tom的數字中發現有1,那就要把Jack的5,9給Tom;
在Tom的數字中發現有2,那就要把Li的7給Tom, Bob只有一個2,沒有其他數字,沒辦法給;
在Tom的數字中發現有3,Jack、Bob、Li都沒有3,沒辦法給;
...
最後得出:

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

不知道描述清楚沒?
 真實的情況:人員很多,至少10k,數字至少100k
 怎麼有效率地寫這段程式?謝謝

答案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寫法,上面寫法寫法,可以看看思路~~~~

答案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}}

化~

data = {'Tom':{1,2,3},'Jack':{1,5,9},'Bob':{2},'Li':{2,7}}
valid = {} # 有效值
for k in data:
    for x in data:
        key = '%s-%s'%(x, k)
        if  k != x \
            and (key not in valid) \
            and data[k] & data[x] \
            and data[x] - data[k] \
        :
            valid[key] = data[x] - data[k] 
rslt = {}
for k in data:
    s=set()
    for x in data:
        s |= valid.get('%s-%s'%(x, k),set())
    rslt[k] = s
print(rslt)
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn