json中找到相关联数字的程序?
程序员文章站
2022-05-09 10:05:41
...
问题
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写法,我上面是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}}
优化~
先计算一遍,保存有效集合,避免不必要的重复计算。
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)
推荐阅读
-
什么是驱动程序签名 驱动程序的数字签名又是什么
-
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
-
什么是驱动程序签名 驱动程序的数字签名又是什么
-
基于MNIST手写数字数据集的数字识别小程序
-
js字符串转为数字方法parseInt()、减号、乘号、JSON.parse()、Number()的效率比较
-
微信小程序,json,map和字符串的转化代码讲解
-
C语言:编写程序数一下 1到 100 的所有整数中出现多少次数字 9
-
把网页中的(电话,qq等数字)生成图片的ASP程序
-
百度世界大会晒出小程序成绩单 惊人的数字背后是开发者创业新机遇!
-
未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)