一维数组 ,a[4,1,2,3,4,5,5,4,3]如何判断数值相等的数值,重新组装成一个新的数组?
比如:b[3,3]
c[4,4,4]
f[5,5]
遍历一次放hashmap中,key就是数组的数值,value就是出现的次数
哥们,,能说明白点吗
bu是很明白耶
@海染蓝了天LE:
遍历数组,依次判断在不在hashmap中,如果不在则加进去,value为1,如果存在则让value+1
最后遍历数组完成再遍历hashmap就可以了
@Daniel Cai: 假如数组里面是Json对象呢?
@海染蓝了天LE: 不明白,举例?
@Daniel Cai: 嗯,感觉跟业务还是有点出入
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;
}
}
这样打印出来是一个数组亚?晕
@海染蓝了天LE: 您要的是几维?如果要二维的在遍历一下就可以了。
@村头的张大爷: 一维数组,我想要的结果是,如果值相等,就重新组装成一个新的数组
这样我打印出来,tempArr是一个空的数组
@海染蓝了天LE: js写的
我是原始人;
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);
原始人来了,但是效果出来就可以拉,你这要是for晕人家的赶脚!!
@村头的张大爷:效果出来了,我的代码比较原始,欢迎大家来优化
@菜菜采菜: 待会村尾周大妈就回来优化了
@村头的张大爷: 哈哈哈,周大妈太忙了,没时间来。
@菜菜采菜: 恩呢 周大妈打台球呢!!
这代码看的,,,让人很不舒服亚
@海染蓝了天LE: 哈哈哈,初级的我追求结果,代码的美观和优化还没考虑到,欢迎大神们优化代码。
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 写的,给你点思路
要的就是Js写的
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;
}
最简单,最笨的方法,,循环一个一个遍历,相等的就创建新的数组存入就好了
最简单的排序就是用桶排序,建议你看一下桶排序的方法
用list集合,相同的值放在相同的集合中,最后转成数组就好了,集合的好处不需要事先定义大小,针对这种情况比较方便