我想将具有逻辑花色的记录重新组合在一起

I would like to regroup records thats have a logical suit together

你好,我正在尝试制作这样的东西:

id:1  First: -9999 Last: -9999 group: B 
id:2  First: -9999 Last: -9999 group: B 
id:3  First: 1 Last: 2 group: 0 
id:4  First: 2 Last: 3 group: 0 
id:5  First: 3 Last: 4 group: 0 
id:6  First: 6 Last: 7 group: 1 
id:7  First: 7 Last: 8 group: 1 
id:8  First: 8 Last: 9 group: 1
id:9  First: 9 Last: 10 group: 1
id:10  First: 99 Last: 100 group: 2 
id:11  First: 100 Last: 101 group: 2
id:12  First: 101 Last: 102 group: 2 
id:13  First: 201 Last: 200 group: 3 

不幸的是,我现在明白了:

id:1  First: -9999 Last: -9999 group: B 
id:2  First: -9999 Last: -9999 group: B 
id:3  First: 1 Last: 2 group: 0 
id:4  First: 2 Last: 3 group: 1 
id:5  First: 3 Last: 4 group: 1 
id:6  First: 6 Last: 7 group: 2 
id:7  First: 7 Last: 8 group: 3 
id:8  First: 8 Last: 9 group: 3 
id:9  First: -9998 Last: -9998 group: B 
id:10  First: 99 Last: 100 group: 4 
id:11  First: 100 Last: 101 group: 5 
id:12  First: 101 Last: 102 group: 5 
id:13  First: 201 Last: 200 group: null

如果有人能帮我解决这个问题,我将不胜感激

data= [[OUT_FID_R2:-9999, OBJECTID_R2:1, IN_FID_R2:-9999], [OUT_FID_R2:-9999, OBJECTID_R2:2, IN_FID_R2:-9999], [OUT_FID_R2:2,OBJECTID_R2:3, IN_FID_R2:1], [OUT_FID_R2:3, OBJECTID_R2:4, IN_FID_R2:2], [OUT_FID_R2:4, OBJECTID_R2:5, IN_FID_R2:3], [OUT_FID_R2:7, OBJECTID_R2:6, IN_FID_R2:6], [OUT_FID_R2:8, OBJECTID_R2:7, IN_FID_R2:7], [OUT_FID_R2:9, OBJECTID_R2:8, IN_FID_R2:8],[OUT_FID_R2:-9998, OBJECTID_R2:9, IN_FID_R2:-9998],[OUT_FID_R2:100, OBJECTID_R2:10, IN_FID_R2:99], [OUT_FID_R2:101, OBJECTID_R2:11, IN_FID_R2:100], [OUT_FID_R2:102, OBJECTID_R2:12, IN_FID_R2:101], [OUT_FID_R2:200, OBJECTID_R2:13, IN_FID_R2:201]]  

  
data=data.unique()
    int cle=0
    for (int x=0; x<data.size();x++) {
        for (int j=0; j<data.size();j++){
            if(data[x]['IN_FID_R2']!= data[x]['OUT_FID_R2']){
                if(data[x]['OUT_FID_R2']==data[j]['IN_FID_R2']){
                    data[x].put('new_grp',cle)
                    data[j].put('new_grp',cle)
                    cle++
                }
            }     
            else{
                data[x].put('new_grp','B')
                }
        }
    }
    for (int i=0; i<data.size();i++){
        printf("id:%s  First: %s Last: %s group: %s \n",data[i]['OBJECTID_R2'],data[i]['IN_FID_R2'], data[i]['OUT_FID_R2'],data[i]['new_grp'])
    }

因此,在找到我的第一个条件后的那一刻,该组从 0 开始,但从 1 开始之后的那个,它应该将组保持为 0,因为最后一个(id:3)和第一个(id:4)是相同的,似乎该组仅针对 2 条记录发生。

我查看了您的解决方案,您的解决方案进展顺利。一旦找到顺序范围,唯一的更正将是您分配一个新值。这是我的答案:

int cle =0
for (int x=0; x<data.size();x++) {
    for (int j=0; j<data.size();j++){
        if(data[x]['IN_FID_R2']!= data[x]['OUT_FID_R2']){
            if(data[x]['OUT_FID_R2']==data[j]['IN_FID_R2']){

                if (data[x]['new_grp'] ==null && data[x]['new_grp'] ==null ){
                    
                    data[x].put('new_grp',[cle])
                    data[j].put('new_grp',[cle])

                    
                }else if (data[x]['new_grp'] ==null || data[j]['new_grp'] ==null ){

                    respond= data[x]['new_grp']+data[j]['new_grp']
                    
                    data[x].put('new_grp',respond.findAll{it != null})
                    
                    data[j].put('new_grp',respond.findAll{it != null})      

                }
                     
                cle++
            }
        }     
        else{
            data[x].put('new_grp','B')
            }
    }

}

预期结果将是:

id:1  First: -9999 Last: -9999 group: B 
id:2  First: -9999 Last: -9999 group: B 
id:3  First: 1 Last: 2 group: [0] 
id:4  First: 2 Last: 3 group: [0] 
id:5  First: 3 Last: 4 group: [0] 
id:6  First: 6 Last: 7 group: [2] 
id:7  First: 7 Last: 8 group: [2] 
id:8  First: 8 Last: 9 group: [2] 
id:9  First: -9998 Last: -9998 group: B 
id:10  First: 99 Last: 100 group: [4] 
id:11  First: 100 Last: 101 group: [4] 
id:12  First: 101 Last: 102 group: [4] 
id:13  First: 102 Last: 200 group: [4]