是否可以减去2个String数组以生成新数组?在下面的代码中,我调用我为其他Array操作编写的Methods。我想使用这些方法的结果创建一个新数组。我需要在一行代码中创建新数组。
由于这是一个硬件分配,我不是在寻找为我编写的代码。只是一个小方向。
static String[] xor( String[] set1, String[] set2 )
{
set1 = (union(set1, set2) - intersection(set1, set2));
return set1;
}
答案 0 :(得分:0)
我会将两个数组的内容存储在Set
(每个一个)中,因为这些操作优化了集合(查看add / addAll,remove / removeAll,retainAll方法)。
阅读the Java Tutorial bit about Sets以获取进一步的参考。
答案 1 :(得分:0)
有几种方法可以去。
如果您了解收藏品,可以查看Arrays.asList
,List#removeAll
和List#toArray
。
但是,如果不这样做,则可以使用循环。
boolean[]
一样大的union
和一个int
计数器,从0
开始; union
; String
,请检查intersection
; false
boolean[]
存储在当前索引的true
中; String[]
,然后在计数器中添加一个。boolean[]
;它的长度是计数器的值; true
,并在找到union
的索引处从{{1}}中选择具有相同索引的字符串,并将其存储在第三个数组中。答案 2 :(得分:0)
让我们快速简化您的问题。根据您的描述,您实际上并不关心数组是否已设置,最终结果是两组的xor
。您只想从另一个数组中删除一个数组的内容,例如:
primary = {1, 2, 3, 4, 5, 6}
remove = {3, 5}
result = subtract(primary, remove) = {1, 2, 4, 6}
根据您的评论“我需要在一行代码中创建新数组”,您可能已经拥有了这样一个工具,或许您之前实现的另一种方法?如果没有,你可能不能在一行中做到这一点,但这并不难。只需循环遍历第一个数组(primary
),对于primary
中的每个项目,查看是否在remove
中找到了值,如果没有,请将primary
中的项添加到result
。确保result
数组的大小合适将会有点棘手,但希望这可以指出正确的方向:)
答案 3 :(得分: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/