• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

json中找到相关联数字的程序?

php 搞代码 4年前 (2022-01-23) 13次浏览 已收录 0个评论

问题

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.filte<strong style="color:transparent">来2源gaodaima#com搞(代@码&网</strong><label>搞gaodaima代码</label>r((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] = sprint(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] = sprint(rslt)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:json中找到相关联数字的程序?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址