-1

我想删除重复项,例如{ {1,2,3}, {2,3,1},{3,2,1},{2,1,3} } 是 {2,3,1} 的重复项或给定 4 个集合中的任何一个。为此,我将 2D 整数数组转换为 LinkedHashSet,它删除了重复项,但是当我转换回数组时(由于算法需要),我无法访问单个元素。这可能吗?如果不是,另一种方法是什么。如果是,代码中有什么问题。下面给出。请解决。

我自己的其他想法:我认为通过字符串可能吗?例如 { {2,3,1},{-3,-2,-4},............ } 在 Set 中插入,制作每个 3 个元素集合的 ArrayList eg{2,3,1 },{-3,-2,-4},{3 element}, .....然后 parseInt 以 {2},{3},{1},{-3},{- 2},{-4},... 会起作用吗?

import java.util.*;
class demo
    {
    Integer[][] orderedpair3k={{1,2,3},{1,3,-2},{2,3,-1},{1,2,3},{1,-3,-2},{2,-3,-1},{1,-2,-3},{1,3,2},{-2,3,-1},{1,-2,3},{1,-3,2},{-2,-3,-1}};
    Set<Set<Integer>> r = new LinkedHashSet<Set<Integer>>();
    Object[][] a;

    public void init_clauses()
    {
    removeDuplicate();
    System.out.println(r);

    backToArray();          
      for(int i=0;i<a.length;i++)
         System.out.println(a[0][i]);
    }                       

    public void removeDuplicate()
    {
    int i=orderedpair3k.length;
    for(int j=0;j<i;j++)
        r.add(new LinkedHashSet<Integer>(Arrays.asList(orderedpair3k[j])));
    }    

    public void backToArray() 
    {    
      ArrayList<Set<Integer>> arr=new ArrayList<Set<Integer>>(r);
      a = new Object[arr.size()][3]; 

       for(int i=0;i<a.length;i++)
         a[i]=arr.toArray(new Object[i]); 
    }       
}            
public class sat
{
     public static void main(String[] arg){

     demo S = new demo();
     S.init_clauses();}
}   

//在上面的代码中,我无法访问单个元素,因为即使我尝试使用 ((Integer)a[i][j]).intValue() 在数组中插入 Set 作为对象,我认为这是由于数组。 asList(orderedpair3k[j]) 如何解决这个问题?

4

1 回答 1

1

看起来很简单:

Integer[][] result = new Integer[r.size()][3];
int c = o;
for (Set<Integer> s : r)
  result[c++] = s.toArray(new Integer[3]);
于 2012-06-06T05:01:27.333 回答