⑴ 数组去重的5种方法
数组去重的5种方法:
方法一:
双重for循环去重
原理 两两比较如果相等的话就删除第二个
例如: 1 1 1 3 2 1 2 4
先让第一个1 即arr[0]与后面的一个个比较 如果后面的值等于arr[0] 删除后面的值
第一次结束后的结果是 1 3 2 2 4 删除了后面所有的1
同理 第二次 第三会删除与自己相同的元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function noRepeat1(arr){
// 第一层for用来控制循环的次数
for(var i=0; i<arr.length; i++){
//第二层for 用于控制与第一层比较的元素
for(var j=i+1; j<arr.length; j++){
//如果相等
if(arr[i] == arr[j]){
//删除后面的 即第 j个位置上的元素 删除个数 1 个
arr.splice(j,1);
// j--很关键的一步 如果删除 程序就会出错
//j--的原因是 每次使用splice删除元素时 返回的是一个新的数组
// 这意味这数组下次遍历是 比较市跳过了一个元素
/*
例如: 第一次删除后 返回的是 1 1 3 2 1 2 4
* 但是第二次遍历是 j的值为2 arr[2] = 3
* 相当于跳过一个元素 因此要 j--
* */
j--;
}
}
}
return arr;
}
方法二:
单层for循环
原理和方法一相似
1
2
3
4
5
6
7
8
9
10
11
12
13
function norepeat(arr){
arr.sort();
//先排序让大概相同的在一个位置,这里为什么说是大概相同 是因为sort排序是把元素当字符串排序的 它和可能排成 1 1 10 11 2 20 3 ... 不是我们想要的从小到大
for(var i = 0; i < arr.length-1;i++){
//还是两两比较 一样删除后面的
if(arr[i]==arr[i+1]){
arr.splice(i,1);
//i-- 和j--同理
i--;
}
}
return arr;
}
方法三:
原理:用一个空数组去存首次出现的元素
利用 indexOf 属性 indexOf是返回某个指定的字符在字符串中出现的位置,如果没有就会返回-1
因此我们可以很好的利用这个属性 当返回的是 -1时 就让其存入数组
1
2
3
4
5
6
7
8
9
function noRepeat2(arr){
var newArr = [];
for(var i = 0; i < arr.length; i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
}
return newArr;
}
方法四:
原理:利用对象的思想,如果对象里没有这个属性的话就会返回undefined
利用这个原理当返回的是undefined时让其放入数组然后在给这个属性赋值
1
2
3
4
5
6
7
8
9
10
11
function norepeat3(arr) {
var obj = {};
var newArr = [];
for(var i = 0; i < arr.length; i++) {
if(obj[arr[i]] == undefined) {
newArr.push(arr[i]);
obj[arr[i]] = 1;
}
}
return newArr;
}
方法五:
原理:循环比较如果相等的让后面的元素值为0,最后在输出的时候删除为0的这个前提是你的数据里不能有0,但是凡事可以变通你可以设置任何值替代这个0,这个方法是我当时想到实现的所以没有进行很好的优化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var newArr = [];
//控制外循环
for(var i=0; i<arr.length-1;i++){
//内存循环 只比较后面的
for(j=i+1;j<arr.length;j++){
//如果相等就让其值等于0
if(arr[i]==arr[j]){
arr[j]=0;
}
}
//去除值为0的
if(arr[i]==0){
continue;
}else{
//放入新的数组
newArr.push(arr[i]);
}
}
推荐教程:《PHP视频教程》
以上就是数组去重的5种方法有哪些?的详细内容,更多请关注php中文网其它相关文章!
⑵ xls excel数组公式怎么操作
这个跑这里问没用,数组是个大学问,一时半会说不清,建议楼主网络,有视频教程,你慢慢学吧!!!
⑶ PHP数组视频教程
php100.com上面有
⑷ 有没有专门讲指针和数组的视频
这个很少。。。。我给你写个看哈
指针--指针数组
//字符串(单词)排序(字典序)
#include<iostream>
//#include<string.h>
using namespace std;
int main()
{
void sort(char *name[],int n);
void print(char *name[],int n);
char *name[]={"Follow me","BASIC","Great Wall","Pascal","Computer"};
int n=5;
sort(name,n);
print(name,n);
system("pause");
return 0;
}
void sort(char *name[],int n)
{
char *temp;
int i,j,k;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0)
k=j;
if(k!=i){
temp=name[i];
name[i]=name[k];
name[k]=temp;
}
}
}
void print(char *name[],int n)
{
int i;
for(i=0;i<n;i++)
cout<<name[i]<<endl;
}
指针--数组指针
#include<iostream>
#include<iomanip>
using namespace std;
void mul(int (*a)[2],int (*b)[4],int (*c)[4]);
void out(int (*c)[4]);
int main()
{
int a[3][2]={1,2,3,4,5,6};
int b[2][4]={1,2,3,4,5,6,7,8};
int c[3][4];
mul(a,b,c);
out(c);
system("pause");
return 0;
}
void mul(int (*a)[2],int (*b)[4],int (*c)[4])
{
int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<4;j++){
c[i][j]=0;
for(k=0;k<2;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
void out(int (*c)[4])
{
int i,j;
for(i=0;i<3;i++){
for(j=0;j<4;j++)
cout<<setw(5)<<*(*(c+i)+j);
cout<<endl;
}
}
⑸ 求下java数组部分的教学视频,自己看书理解能力不够!!!
这个你可以搜索下疯狂JAVA的视频教程 李刚疯狂JAVA 电驴上面都有的 广州疯狂JAVA还真不错 老师的人也很好,建议你过来看下
⑹ 怎样给数组赋值
给数组赋初值的方法:
1、直接初始化:int arr[3]={1,2,3};
2、遍历访问初始化:for(i = 0;i< 3;i++) arr[i]=i;
3、内存操作函数:memset(arr,3,abs);//abs为另一个已知的数组。
4、字符串赋值函数,仅限于char型数组:strcpy(arr,abs) ;abs为一字符串或者char型数组。
⑺ 易语言的数组太难学了,请问谁有关于数组的视频可学,或方法。
数组,就是一列数
比方说
变量a,数组填2
那么你就相当于创造了两个变量:a[1],a[2]。
相应的,成员为0,那么你创造了0个变量:(这里啥也没有)。
但是为什么还要那么多0个成员的数组呢?
因为在程序运行的时候,你随时根据需要可以多加几个变量,直接给这个数组 加入成员()即可
还有多维数组,你想创建一个数组a,数组a中有两个成员,他们又都是一个数组:
a是一个数组为2,3的变量,相当于创造了两个成员为三的数组(就是6个变量:2*3=6):
a[1][1]
a[1][2]
a[1][3]
a[2][1]
a[2][2]
a[2][3]
a是一个数组为2,2,2的变量(总共有2*2*2=8个变量):
a[1][1][1] a[1][1][2]
a[1][2][1] a[1][2][2]
a[2][1][1] a[2][1][2]
a[2][2][1] a[2][2][2]
值得注意,这些[1]可以用变量代替,比如:
q=1,w=2,d=1
a[q][w][d]就相当于a[1][2][1]
⑻ C语言中如何定义数组
C语言中,同变量一样;数组也必须先定义后使用。
一维数组的定义形式:
类型标识符 数组名[常量表达式];例如int a[10]; 其中a为地址常量。
如变量的定义一样,int a ;double a;float a等;数组的定义只是把后面的变量名改为数组名而已。
int a[10]就是定义了一个数组名为a的数组;此数组有10个元素。其中各元素从a[0]到a[9];并没有a[10]元素。下面列举一个。
常量表达式可以包括字面常量和符号常量;但不能包含变量。例如对下面定义是错误的
int n=5
int a[n]
可以修改为
#define N 5
int a[N]
其中对二维及多位数组定义可以类推
int a[x][y][z][...]其中 x,y,z为数字。
网络-C语言
⑼ java数组。我是初学者,看视频看到数组部分,为嘛完全看不懂呢。。求解释,,
我觉得学习java之前如果你学习过C或者数据结构的话,再看起来会简单的很多
好吧我给你这个程序加上注释吧,格式是一行对应一行,你看准了,
//这个是一个java中静态方法,要求传入参数是一个整型的数组,得到的结果是一个整型的数据
//
//定义你将返回的整型变量,=arr[0],把数组的第一个元素赋值给max
//for循环,int x = 1 是指从第二个元素开始循环,条件中x<arr.length里面的arr.length是获取该数组的长度
//
//if语句的作用是如果数组中的这个元素arr[x](考循环X变化取出的数组元素)大于你数组的第一个元素(第一遍时是int max = arr[0],所以是第一个元素,第二遍就是赋值语句的作用,为上次循环里面的arr[x]所取得值)的话,就将本次循环所取得数组元素赋值给max
//循环结束
//返回在循环遍历数组所取得数组中的最大值
第二个方法的作用就是调用第一个方法,并打印返回值,在这里就不做详尽的解释了,其实你可以这样理解数组:{1,2,3,4,5,6,7}java中这个数组有7个元素,这七个元素分别一个挨着一个的组成数组这种形式的数据结构,第一个元素对应的是arr[0],第二个对应的是arr[1]..........以此往后推,java中的数组可以调用的方法你可以阅读API进行查看,.length只是获取数组长度,还有排序啊什么的,很多,在这里不一一解释。