js 数组集合和区间集合的相互转化

需求:

总核:16 已用核:['1', '3-5', '8'] 求未用的核数即 :求 ['0', '2', '6-7', '9-15']

思路:

1. 将总核、已用核都转化成数组形式

2. 从总核数组中删除已用核,得到未用核数组

3. 将未用核数组转化成区间集合

实现:

//区间转化成一个数组    '3-5' -> [3,4,5]
const generateArry=(start:number,end:number)=>{
    return Array.from(new Array(end+1).keys()).slice(start);
};


//封成一个函数
const UnUse=(n:number,target:string[])=>{
    let cpuList=[...new Array(n).keys()]  //ES6不用循坏快速创建从0到N的数组的
    
    //区间集合=>数组集合
    for(let i=cupList.length-1;i>=0;i--){
        for(let j=0; j<target.length; j++){
            //判断是单个的核,还是核区间
            if(target[j].indexOf('-')!== -1){  //indexOf 返回数组中的下标
               //存在区间
                let segment=generateArry(parseInt(target[j].split('-')[0]),parseInt(target[j].split('-')[1]));
                for(let k=0; k<segment.length;k++){
                    if(cpuList[i]===segment[k]){
                        cpuList.splice(i,1);
                        continue;
                    }
                }
            }else{
                //单个核
                 if(cpuList[i]===parseInt(target[j])){
                      cpuList.splice(i,1);
                      continue;
                 }
            }
        }

    }
    //数组集合->区间集合   [0,2,6,7,9,10,11,12,13,14,15] -> ['0', '2', '6-7', '9-15']
    let result=[];
    let p=0;
    let cpus:sting[]=[];
    const list = cupList.sort((a,b)=>a-b);
    list.forEach((item,index)=>{  //将有序的数合并成一个数组  -> [[0],[2],[6,7],[9,10,11,12,13,14,15]]
        if(index===0){
            result[0]=[item];
        }else if(item-List[index-1]===1){
            result[p].push(item);  //连续的放一块  
        }else{
            result[++i]=[item];  //开辟新空间
        }
    }); 
    // 集合变成区间字符串  -> ['0', '2', '6-7', '9-15']
    result.forEach((element)=>{
        if(element.length>1){
            cpus.push(element[0]+'-'+element[element.length-1]);
        }else{
            cpus.push(element.toString());
        }
    });
    return cpus;
}




相关资料:

js将数组中的连续数字分组_天蒙蒙亮的博客-CSDN博客_js连续数字 

JS如何截取一段字符中,某一个字符的前面和后面的字符 - 风琴~云淡 - 博客园

JS生成一个连续数值的数组_CSU_Zipple的博客-CSDN博客_js 生成数字数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值