>백엔드 개발 >PHP 튜토리얼 >json에서 관련 번호를 찾는 프로그램?

json에서 관련 번호를 찾는 프로그램?

PHP中文网
PHP中文网원래의
2016-10-17 09:30:121021검색

질문

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만 있고 다른 숫자는 없으므로 줄 수 없습니다.
3이 있는 것으로 나타났습니다. Tom의 전화번호는 Jack, Bob, Li 모두 없습니다. 3. 줄 수 없습니다.
...
마침내 생각해낸 내용은 다음과 같습니다.

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

설명이 명확한지 모르시나요?
실제 상황: 사람이 많고, 최소 10,000명 이상이며, 그 수는 최소 100,000명 이상입니다.
이 프로그램을 효율적으로 작성하는 방법은 무엇입니까? 감사합니다

답변 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 :

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)

python3 set

{'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으로 문의하세요.