假设我有数组A: A = {1,2,3,4,5,6,7,8,9}
然后我用扫描仪将我的偏好输入到另一个数组,假设B,然后B有值: B = {1,2,6,8,9}
现在问题是,我有另一个数组(C),有没有一种方法,所以当数组B设置时,数组C自动具有值: C = {3,4,5,7}
哪个C的值是B不选择的A的其余部分。我正在使用Java语言。任何帮助表示赞赏。
答案 0 :(得分:1)
以下是我在python中解决同样问题的代码。
import numpy
a = numpy.array([1,2,3,4,5]) # declare array
b = numpy.array([1,2,3]) # declare array
c = set(a) - set(b)
输出: - c = [4,5]
答案 1 :(得分:1)
使用TreeSet在Java中标准化集合操作。
Set<Integer> a = new TreeSet<Integer>(Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9}));
Set<Integer> b = new TreeSet<Integer>(Arrays.asList(new Integer[]{1, 2, 6, 8, 9}));
//union
Set<Integer> c = new TreeSet<Integer>(a);
c.addAll(b);
System.out.println(c);
//intersection
Set<Integer> d = new TreeSet<Integer>(a);
d.retainAll(b);
System.out.println(d);
//difference
Set<Integer> e = new TreeSet<Integer>(a);
e.removeAll(b);
System.out.println(e);
//reverse
List<Integer> list = new ArrayList<Integer>(a);
java.util.Collections.reverse(list);
System.out.println(list);
答案 2 :(得分:1)
private final int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
private int[] b; // I didn't set b to any value
private Integer[] c; // REMEMBER to set it yourself or you will have a null pointer
现在我们创建一个设置b
的方法:
private void setB(int[] newB) {
this.b = newB;
}
现在每次设置B的值......
b = someMethodThatGetsUserInput();
您不应该使用上述内容,而是致电:
setB(someMethodThatGetsUserInput());
为什么呢?因为我们会在setB
中编写一些更改C的代码。所以每次设置B的值时,C也会改变。
让我们看看我们如何编写代码来改变C,这样它就是A所拥有但B却没有的元素。
直截了当的方式是:
ArrayList<Integer> list = new ArrayList<>();
for (int i : a) {
if (!b.contains(a)) {
list.add(i);
}
}
c = list.toArray(new Integer[0]);
容易!
还有其他方法,比如像其他人提到的那样使用套装。但我认为,作为初学者,你应该首先学习最直接,最低效的方法。
过早优化是万恶之源