我是一名 Java 初学者,我一直在尝试编写一种方法来列出数组中某个 int 的所有索引。到目前为止,我所做的是将该 int 的值存储在另一个数组中的相应索引处,但我能做的最好的事情就是将所有其他不等于原始 int 的索引的值设置为 -1。
我想我需要在数组中存储值I,并删除所有的-1,但是我不知道怎么做。顺便说一下,这些值是-1,因为这个程序中所有的数组都包含0-100之间的整数。如果数组中的整数可以是任意数,我该怎么办?
当然,也有一种更容易或更有效的方法来做到这一点。
public static int[] maxValueIndex(int[] arr, int targetValue, int x) {
int[] maxValue = new int[x];
for (int i = 0; i < arr.length; i++) {
if (arr[i] == targetValue) {
maxValue[i] = arr[i];
} else {
maxValue[i] = -1;
}
}
return maxValue;
}
如果只需要使用数组来解决此任务,则可能需要两次才能创建仅包含有效索引的压缩数组:
public static int[] getTargetIndexes(int targetValue, int ... arr) {
int n = arr.length;
int targetCount = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == targetValue) {
targetCount++;
}
}
int[] indexes = new int[targetCount];
for (int i = 0, j = 0; j <targetCount && i < n; i++) {
if (arr[i] == targetValue) {
indexes[j++] = i;
}
}
return indexes;
}
public static int[] getTargetIndexes(int targetValue, int ... arr) {
int n = arr.length;
int[] indexes = new int[n];
int targetCount = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == targetValue) {
indexes[i] = i;
targetCount++;
} else {
indexes[i] = -1;
}
}
for (int i = 0, j = 0; j < targetCount && i < n; i++) {
if (indexes[i] > -1) {
indexes[j++] = i;
}
}
return Arrays.copyOf(indexes, targetCount); // truncate bad indexes
}
此外,该方法的签名使用vararg将输入数组作为int
的序列传递——那么vararg参数int…arr
应该是最后一个。
如果可以使用Stream API,则可以通过声明性方式方便地解决任务:
public static int[] getTargetIndexes(int targetValue, int ... arr) {
return IntStream.range(0, arr.length) // get stream of indexes
.filter(i -> arr[i] == targetValue) // keep only matching indexes
.toArray(); // build output array
}
如果我正确理解了您的查询,那么您需要一个包含所有索引 i 的数组,以便
arr[i]==targetValue
。我们可以使用任何动态数据结构有效地实现这一目标。例如,使用 ArrayList
并继续逐个添加所有所需的索引,然后将 List 转换为数组并返回它。
像这样:
List<Integer> index = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++)
{
if (arr[i] == targetValue)
index.add( i );
}
int[] maxValue = index.stream().mapToInt(Integer::intValue).toArray();
return maxValue;
问题内容: 我知道有一种用于Python列表的方法来返回某些内容的第一个索引: NumPy数组有类似的东西吗? 问题答案: 是的,在给定数组和值的情况下,这是搜索的答案: 结果是具有所有行索引,然后是所有列索引的元组。 例如,如果一个数组是二维的,并且它在两个位置包含你的商品,则 将等于你的项目,因此
我有一组这样的对象: 我想对其进行过滤,以便每个唯一名称都有一个实例,该实例必须给出小于或等于40的最大值。如果过滤,上述情况将返回: 最终的数组不必按任何特定的顺序排序。
如果我从问题中选择“q1”,我如何从答案中选择第一个数组? 这是我现在的代码:
问题内容: 我有两个numpy数组A和B。A包含唯一值,而B是A的子数组。 例如: 问题答案: 您可以使用带有- 如果您关心维护订单,也可以使用- 对于一般情况,当&是未排序的数组时,您可以在中引入选项,就像这样- 为了解决一般情况,我还会添加我最喜欢的内容- 样品运行-
问题内容: 我想了解 从另一个数组的所有元素过滤数组 的最佳方法。我尝试使用过滤器功能,但是如何给它提供要删除的值并没有解决。 就像是: 如果过滤器功能没有用,您将如何实现呢? 编辑:我检查了可能重复的问题,它可能对那些容易理解javascript的人有用。选中的答案很容易。 问题答案: 您可以使用函数的参数来避免将过滤器数组存储在全局变量中。
我想了解从另一个数组的所有元素中筛选一个数组的最佳方法。我尝试了筛选函数,但我不知道如何给它我想要删除的值。 类似内容: 如果过滤器功能不是有用的,你将如何实现它? 编辑:我检查了可能重复的问题,对于那些容易理解javascript的人来说,它可能很有用。如果答案被检查为好,事情就会变得简单。