如何将两个数组的元素建立起对应关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将两个数组的元素建立起对应关系相关的知识,希望对你有一定的参考价值。

两个数组a和b,当我在数组a中找到一个元素时,要在b中能够找到与a相对应的元素。
好比a[]=1,2,3,4,5,6,7,8,9,10
b[]=[10,9,8,7,6,5,4,3,2,1,
这样他们就有对应的关系,a[5]与b[5]对应
然后打乱a的顺序后,要还能找到对应的元素
注意,a元素中可能有相同的元素值;所以用查找的方法似乎有点不行。
大家帮忙,解决了我的问题必有重赏
言出必行

(1) 第一种方法:就是打乱a的顺序的时候 ,也打乱b的顺序,使用相同的方法,也就是a和b的一起变化
这样两者还是以下标对应的。
(2) 使用结构体数组,将b修改为结构体数组,其成员有两个:value也就是b元素原来的值,index对应的a中数组元素的下标。
这样当我们打乱a数组的元素的时候,修改b中对应元素的index的值,以后找对应元素的时候,只要通过数组a的下标和数组b的index对应就可以了。

这两种方法,都是在b随着a的变化而变化的基础上的。

(3)第三种方法,和第二种差不多,不过不必改动b的数组,另外设置一个数组c用来存放b中元素对应的a的元素的下标,也就是将2中的index用一个数组来存储,而不是放在b中,这样 b和c的下标一一对应 c的元素的值和a的下标对应,过渡就可以了。
参考技术A employee *delcre(employee * head,employee * head1)
employee *p,*s,*q;
p=head;
while(head->age>55&&head->sex=='m'||head->age>60&&head->sex=='w')
if(head1==NULL)head1=head;q=head;
else q->next=p;q=p;
head=head->next;
p=head;
cout<<"已删除"<<endl;

s=head;
p=head->next;
while(p!=NULL)本回答被提问者采纳
参考技术B 先想好你想要的对应关系是什么样子的对应,数组b会不会变动?如果数组b不变而且a数组中的值限定在你设定的值内的话,就直接根据数组a元素的值去查找数组b就可以了,比如a[i] = 8;那么你要的值就是b[8-1],或者写成b[a[i]-1].
如果是这样“对应”的话,a中的重复项将对应到b中的同一个项。没问题。

如果数组b会变化的话,请描述清楚对应关系,按位置还是按值获知按什么比例之类的。首先要描述的清除。

下面是你的描述:“这样他们就有对应的关系,a[5]与b[5]对应”
是不是可以理解为放在数组a的5号元素与放在数组b的5号元素对应?或者你想描述的是按照对应的设定,如果在a的任何位置出现了设定时a[5]的值,也就是数字6的话,那么对应的b数组应该还是b[5] ,也就是5啊(上面的方法就是这样做的)

js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

题目:

  给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致。

 

 假设已经写好了Array.prototype.sameStructureAs ,会有下面的结果:

  

[1,1].sameStructureAs([2,2])
//    true

[1,[1,1]].sameStructureAs([2,[2,2]])
//    true

[1,[1]].sameStructureAs([[2],2])
//    false

[[],[]].sameStructureAs([[],[]])
//    true

看到上面的代码返回值,或许你就明白了。sameStructureAs方法的功能就如此之简单。

那么, 该怎么实现呢,如下:

Array.prototype.sameStructureAs = function (other) {
    // Return \'true\' if and only if \'other\' has the same
    // nesting structure as \'this\'.

    // Note: You are given a function isArray(o) that returns
    // whether its argument is an array.
    
    if (! (other instanceof Array) ) return false;    //    传入的不是数组返回false
    
    //    这个函数返回一个序列号
    function count (arr) {
      //    第一次调用添加一个index属性
      if (typeof count.index === \'undefined\') {
        count.index = 0
      }
      var resStr = \'\'    //    返回的序列号
      
      if (!arr.length) resStr += count.index    // 如果传入数组为空,序列号为当前index属性值
      
      for (var i = 0; i < arr.length; i++) {
        if (typeof arr[i] !== \'object\') {
          resStr += count.index   //  如果这个元素不是数组,序列号为当前index属性值
        } else {
          count.index++    //  将index属性值+1,是为了进入下一层数组
          resStr += count(arr[i])    //   返回当前传入数组的序列号
          count.index--      //这里 -1 是回到当前层次中,继续遍历
        }
      }
      return resStr
    }
    
    return count(this) === count(other)
    
}

思路是这样的:

  因为这仅仅判断数组,并没有其他引用类型的对象,如RegExp、Date等,所以就容易多了。

  我先设定数组第一层的非数组元素的序列号为0 ,也就是说 [1,1,1] 序列号是 [0,0,0],因此返回的数组序列号为\'000\',同样[2,2,2]也返回\'000\'

  每进入一层数组前,那么元素序列号就 +1,该循环完成并返回值后,元素序列号 - 1, 回到当前层次的数组中继续遍历。

  注: 如果当前数组为空,数组序列号应该为当前数组层次,这是为了判断在所有元素师空数组时的情况。如[[],[]]返回\'11\'、[[[],[]]]返回\'22\'。

 

以上是关于如何将两个数组的元素建立起对应关系的主要内容,如果未能解决你的问题,请参考以下文章

python中如何比较两个数组中对应位置的元素的大小

c#中,如何对两个数组里的元素一一对应?

lingo中两个数组对应元素相加如何表示

matlab学习3

如何通过 C++ 将一个数组重新制作成两个更小的数组?

将数组3,7,1,6,2,4,8,5中的元素从大到小的顺序排列,每次可以任意交换两个元素,求最少的交换次数。