3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
算法可以歸納為集合運(yùn)算,可轉(zhuǎn)化為整數(shù)的位運(yùn)算,達(dá)到高效目的。 說明如下圖:

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
可以如此拆分
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
})
}
因?yàn)椴恢滥氵@些參數(shù)是不是確定的,所以大概這么寫
后續(xù)才發(fā)現(xiàn) 你要的是php寫法,我上面是js寫法 ,可以看看思路~~~~

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
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)
結(jié)果:
{'Jack': {2, 3}, 'Tom': {9, 5, 7}, 'Li': {1, 3}, 'Bob': {1, 3, 7}}
優(yōu)化~
先計(jì)算一遍,保存有效集合,避免不必要的重復(fù)計(jì)算。
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)
添加回答
舉報(bào)