問題
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)