首页新闻找找看学习计划

一维数组 ,[1,2,3,4,5,5,4,3]如何判断数值相等的数值,重新组装成一个新的数组?

0
悬赏园豆:5 [已解决问题] 解决于 2018-08-10 16:10

一维数组 ,a[4,1,2,3,4,5,5,4,3]如何判断数值相等的数值,重新组装成一个新的数组?

 

比如:b[3,3]

         c[4,4,4]

         f[5,5]

海染蓝了天LE的主页 海染蓝了天LE | 初学一级 | 园豆:26
提问于:2017-12-21 20:42
< >
分享
最佳答案
0

遍历一次放hashmap中,key就是数组的数值,value就是出现的次数

收获园豆:5
Daniel Cai | 专家六级 |园豆:10374 | 2017-12-21 20:45

哥们,,能说明白点吗

海染蓝了天LE | 园豆:26 (初学一级) | 2017-12-21 20:53

bu是很明白耶

海染蓝了天LE | 园豆:26 (初学一级) | 2017-12-21 20:55

@海染蓝了天LE: 

遍历数组,依次判断在不在hashmap中,如果不在则加进去,value为1,如果存在则让value+1

最后遍历数组完成再遍历hashmap就可以了

Daniel Cai | 园豆:10374 (专家六级) | 2017-12-21 20:56

@Daniel Cai: 假如数组里面是Json对象呢?

海染蓝了天LE | 园豆:26 (初学一级) | 2017-12-21 21:12

@海染蓝了天LE: 不明白,举例?

Daniel Cai | 园豆:10374 (专家六级) | 2017-12-21 21:22

@Daniel Cai: 嗯,感觉跟业务还是有点出入

海染蓝了天LE | 园豆:26 (初学一级) | 2017-12-21 21:25
其他回答(8)
0

var arr=['1','1','1','2',,'3','4','5','5','6','6','7', '8','9','9','10'];
var newArr = [];
tempArr = [];
for(var i=0,j=arr.length;i<j;i++){
if(arr[i] == arr[i+1]){
tempArr.push(arr[i]);
} else {
tempArr.push(arr[i]);
newArr.push(tempArr.slice(0));
tempArr.length = 0;
}
}

村头的张大爷 | 园豆:129 (初学一级) | 2017-12-21 21:11

这样打印出来是一个数组亚?晕

支持(0) 反对(0) 海染蓝了天LE | 园豆:26 (初学一级) | 2017-12-21 21:19

@海染蓝了天LE: 您要的是几维?如果要二维的在遍历一下就可以了。

支持(0) 反对(0) 村头的张大爷 | 园豆:129 (初学一级) | 2017-12-21 21:20

@村头的张大爷: 一维数组,我想要的结果是,如果值相等,就重新组装成一个新的数组

支持(0) 反对(0) 海染蓝了天LE | 园豆:26 (初学一级) | 2017-12-21 21:23

这样我打印出来,tempArr是一个空的数组

支持(0) 反对(0) 海染蓝了天LE | 园豆:26 (初学一级) | 2017-12-21 21:27

@海染蓝了天LE: js写的

支持(0) 反对(0) 村头的张大爷 | 园豆:129 (初学一级) | 2017-12-21 21:40
1

我是原始人;

public function actionTest(){
$arr=['4','1','2','3','4','5','5','4','3'];
$res=array_count_values($arr);
//print_r($res);
foreach($res as $k=>$v){
if($v>1){
$res2[]=$k;
}
}
//print_r($res2);die;
foreach($arr as $k=>$v){
if(!in_array($v,$res2)){
unset($arr[$k]);
}
}
//print_r($arr);
$a=[];
$b=[];
$c=[];
foreach($res2 as $k=>$v){
foreach($arr as $key=>$val){
if($val==$v){
$res3[]=$val;
}
}
}
//print_r($res3);die;
$a=[];
$b=[];
$c=[];
$d=[];
foreach($res3 as $k=>$v){
$one=$res3[0];
if($one==$v){
array_push($a,$v);
}else{
array_push($b,$v);
}

}
foreach($b as $k=>$v){
$two=$b[0];
if($two==$v){
array_push($c,$v);
}else{
array_push($d,$v);
}
}
//print_r($two);die;
print_r($a);
//print_r($b);
print_r($c);
print_r($d);

菜菜采菜 | 园豆:194 (初学一级) | 2017-12-21 22:20

原始人来了,但是效果出来就可以拉,你这要是for晕人家的赶脚!!

支持(0) 反对(0) 村头的张大爷 | 园豆:129 (初学一级) | 2017-12-21 22:22

@村头的张大爷:效果出来了,我的代码比较原始,欢迎大家来优化

支持(1) 反对(0) 菜菜采菜 | 园豆:194 (初学一级) | 2017-12-21 22:23

@菜菜采菜: 待会村尾周大妈就回来优化了

支持(0) 反对(0) 村头的张大爷 | 园豆:129 (初学一级) | 2017-12-21 22:25

@村头的张大爷: 哈哈哈,周大妈太忙了,没时间来。

支持(0) 反对(0) 菜菜采菜 | 园豆:194 (初学一级) | 2017-12-21 22:26

@菜菜采菜: 恩呢 周大妈打台球呢!!

支持(1) 反对(0) 村头的张大爷 | 园豆:129 (初学一级) | 2017-12-21 22:27

这代码看的,,,让人很不舒服亚

支持(0) 反对(0) 海染蓝了天LE | 园豆:26 (初学一级) | 2017-12-22 09:36

@海染蓝了天LE: 哈哈哈,初级的我追求结果,代码的美观和优化还没考虑到,欢迎大神们优化代码。

支持(0) 反对(0) 菜菜采菜 | 园豆:194 (初学一级) | 2017-12-22 09:56
0
var arr=['1','1','1','2','3','4','5','5','6','6','7', '8','9','9','10'];
var temp = [];
var newArr = [];
for(var i=0;i<arr.length;i++){
    if(!temp[arr[i]]){
        temp[arr[i]] = 1;
        newArr.push(arr[i])
    }
    
}
console.log(newArr);
如果数组里是对象:
var arr=[{id:1,name:'z'},{id:2,name:'x'},{id:3,name:'c'},{id:2,name:'x'}];
var temp = [];
var newArr = [];
for(var i=0;i<arr.length;i++){
  if(!temp[arr[i].id]){
    temp[arr[i].id] = 1;
    newArr.push(arr[i])
  }
}
console.log(newArr);
我用 js 写的,给你点思路
Grewer | 园豆:254 (菜鸟二级) | 2017-12-21 23:13

要的就是Js写的

支持(0) 反对(0) 海染蓝了天LE | 园豆:26 (初学一级) | 2017-12-22 09:36
0

public static void main(String[] args) {

Integer[] array = {4,1,2,3,4,5,5,4,3};
Map<String, List<Integer>> result = new HashMap<String, List<Integer>>();
for(int i=0; i<array.length; i++){
// 检查array中第i个元素是否存在于map中已有的list
List<Integer> list = isInMap(String.valueOf(array[i]), result);
if(list == null){// 不存在,新建一个
list = new ArrayList<Integer>();
}
list.add(array[i]);
result.put(String.valueOf(array[i]), list);
}
for(List<Integer> subList: result.values()){
System.out.println("新数组:"+Arrays.toString(subList.toArray()));
}
}
// 遍历map的value,拿到所有的新数组
private static List<Integer> isInMap(String key, Map<String, List<Integer>> map){
List<Integer> list = map.get(key);
if(list != null){
return list;
}
return null;
}

 

DevilSatan | 园豆:202 (菜鸟二级) | 2017-12-22 14:08
0

hashmap应该是代码最简单效率最高的方法了。1楼说的很正确,我补充一点任何数据都可以hash,所以你说的json对象不存在问题。

水墨的心 | 园豆:361 (菜鸟二级) | 2017-12-22 16:27
0

最简单,最笨的方法,,循环一个一个遍历,相等的就创建新的数组存入就好了

左思右想 | 园豆:202 (菜鸟二级) | 2017-12-22 23:03
0

最简单的排序就是用桶排序,建议你看一下桶排序的方法

大宇007 | 园豆:329 (菜鸟二级) | 2017-12-28 10:45
0

 用list集合,相同的值放在相同的集合中,最后转成数组就好了,集合的好处不需要事先定义大小,针对这种情况比较方便

jqw2009 | 园豆:1891 (小虾三级) | 2018-01-09 15:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册