从二维整数数组中删除重复行
Remove Duplicate row from 2D integer array
我知道之前有人问过这个问题,但我真的找不到可行的方法 我尝试了以下 link How to construct ArrayList from 2D int array? 中的方法,我认为这与我的案例最相关我应用了以下代码:
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class MonteCarloSim {
private int[] ints;
public MonteCarloSim(int[] ints) {
this.ints = ints.clone();
Arrays.sort(this.ints);
}
@Override
public int hashCode() {
return Arrays.hashCode(ints);
}
@Override
public boolean equals(Object obj) {
if(obj instanceof MonteCarloSim) {
MonteCarloSim another = (MonteCarloSim) obj;
int[] original = Arrays.copyOf(another.ints, another.ints.length);
return Arrays.equals(ints, original);
} else {
return false;
}
}
@Override
public String toString() {
return Arrays.toString(ints);
}
public static void main(String arg[]){
然后我确定了一个二维整数数组,其中零个元素的大小为 1000*20,名为 IncProb1 我应用以下代码删除重复行:
int[][] arrays = IncProb1;
Set<MonteCarloSim> rows = new HashSet<MonteCarloSim>();
for(int[] a: arrays) {
rows.add(new MonteCarloSim(a));
}
for(MonteCarloSim row: rows) {
System.out.println(row);
}
但这不起作用我只得到一行 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 , 1, 1, 1, 1] 这不是解决方案,应该至少有 300 行不重复。我不知道怎么了 非常感谢任何帮助
提前致谢
以下方法可以解决您的问题
public static int[][] removeDuplicateRow(int[][] testArr)
{
/**
* This method will remove the duplicate ROW from 2-D array and replace with {0,0,0}
* However i assume array rows =5 and coloums =3 ;) You can have the solution for that I assume
*/
HashSet<String> hashSet = new HashSet<String>();
int[][] result = new int[5][3];
int i = 0;
for(int[] a : testArr)
{
System.out.println(Arrays.toString(a));
System.out.println(hashSet.contains(a));
if(!hashSet.contains(Arrays.toString(a))){
hashSet.add(Arrays.toString(a));
result[i] = a;
}
i++;
}
System.out.println("old array : "+Arrays.deepToString(testArr));
System.out.println("new array : "+Arrays.deepToString(result));
return result;
}
希望对您有所帮助。
我知道之前有人问过这个问题,但我真的找不到可行的方法 我尝试了以下 link How to construct ArrayList from 2D int array? 中的方法,我认为这与我的案例最相关我应用了以下代码:
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class MonteCarloSim {
private int[] ints;
public MonteCarloSim(int[] ints) {
this.ints = ints.clone();
Arrays.sort(this.ints);
}
@Override
public int hashCode() {
return Arrays.hashCode(ints);
}
@Override
public boolean equals(Object obj) {
if(obj instanceof MonteCarloSim) {
MonteCarloSim another = (MonteCarloSim) obj;
int[] original = Arrays.copyOf(another.ints, another.ints.length);
return Arrays.equals(ints, original);
} else {
return false;
}
}
@Override
public String toString() {
return Arrays.toString(ints);
}
public static void main(String arg[]){
然后我确定了一个二维整数数组,其中零个元素的大小为 1000*20,名为 IncProb1 我应用以下代码删除重复行:
int[][] arrays = IncProb1;
Set<MonteCarloSim> rows = new HashSet<MonteCarloSim>();
for(int[] a: arrays) {
rows.add(new MonteCarloSim(a));
}
for(MonteCarloSim row: rows) {
System.out.println(row);
}
但这不起作用我只得到一行 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 , 1, 1, 1, 1] 这不是解决方案,应该至少有 300 行不重复。我不知道怎么了 非常感谢任何帮助 提前致谢
以下方法可以解决您的问题
public static int[][] removeDuplicateRow(int[][] testArr)
{
/**
* This method will remove the duplicate ROW from 2-D array and replace with {0,0,0}
* However i assume array rows =5 and coloums =3 ;) You can have the solution for that I assume
*/
HashSet<String> hashSet = new HashSet<String>();
int[][] result = new int[5][3];
int i = 0;
for(int[] a : testArr)
{
System.out.println(Arrays.toString(a));
System.out.println(hashSet.contains(a));
if(!hashSet.contains(Arrays.toString(a))){
hashSet.add(Arrays.toString(a));
result[i] = a;
}
i++;
}
System.out.println("old array : "+Arrays.deepToString(testArr));
System.out.println("new array : "+Arrays.deepToString(result));
return result;
}
希望对您有所帮助。