1

是否可以减去 2 个字符串数组来生成一个新数组?在下面的代码中,我调用了我为其他数组操作编写的方法。我想使用这些方法的结果创建一个新数组。我需要在一行代码中创建新数组。

由于这是一项硬件任务,因此我不是在寻找要为我编写的代码。只是一点方向。

static String[] xor( String[] set1, String[] set2 )
{
    set1 = (union(set1, set2) - intersection(set1, set2)); 
    return set1; 
}
4

4 回答 4

0
static String[] xor( String[] set1, String[] set2 )
{
    set1 = (union(set1, set2) - intersection(set1, set2)); 

    //first create union(set1, set2)
    //create a new array called union_array that contains all values of set1
    //then add values from set2 that are unique to union_array
    //adding to arrays isn't easy.  i would recommend using an ArrayList then converting it back to an array (if your prof allows that)

    //second create intersection(set1, set2)
    //create a new array called intersection_array
    //add every value in set1 that is also in set2.
    //same as before, try to use an ArrayList and convert back to array

    //third, you want to do the "subtraction"
    //remove all cases of intersection_array inside of union_array
    //put all these values in new array:  return_array

    //return return_array;
    return set1; 
}

如果您想要一些有关获取联合和数组交集的代码,请查看:

http://www.dreamincode.net/forums/topic/170409-finding-the-union-and-intersection-of-two-arrays/

于 2013-10-16T16:02:29.480 回答
0

你可以有几种方法。

如果您了解集合,您可能希望查看Arrays.asList和。List#removeAllList#toArray

但是,如果您不这样做,您可能会使用循环。

  • 创建一个boolean[]和 一样大unionint计数器,从0;开始
  • 遍历union;
  • 对于String那里的每个,检查它是否存在于intersection;
  • 如果是,则存储falseboolean[]当前索引处的 , 中;
  • 如果不是,true请改为存储,然后在柜台上添加一个。
  • 创建String[]您希望返回的;它的长度是计数器的值;
  • 迭代boolean[]and,在您找到的索引处true选择具有相同索引的字符串union并将其存储在第三个数组中。
于 2013-10-16T15:52:59.490 回答
0

我会将两个数组的内容存储在一个Set(各一个)中,因为 Set 已针对此类操作进行了优化(查看 add/addAll、remove/removeAll、retainAll 方法)。

阅读有关 Set 的 Java 教程以获取更多参考。

于 2013-10-16T15:44:13.610 回答
0

让我们快速简化您的问题。根据您的描述,您实际上并不关心数组是集合,也不关心最终结果是xor两个集合。您只想从另一个数组中删除一个数组的内容,例如:

primary = {1, 2, 3, 4, 5, 6}
remove = {3, 5}
result = subtract(primary, remove) = {1, 2, 4, 6}

从您对“我需要在一行代码中创建新数组”的评论来看,您可能已经拥有这样一个工具供您使用,也许是您之前实施的另一种方法?如果没有,您可能无法在一行中做到这一点,但这并不太难。只需遍历第一个数组 ( primary),然后对于 in 中的每个项目,primary查看是否在 中找到值remove,如果没有,则将项目添加primaryresult. 确保result数组的大小正确会有点棘手,但希望这会为您指明正确的方向 :)

于 2013-10-16T16:00:35.463 回答