当前位置: 首页 > 知识库问答 >
问题:

如何从另一个数组返回具有某个int的索引的数组

楚冷勋
2023-03-14

我是一名 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;
    }

共有2个答案

东方明亮
2023-03-14

如果只需要使用数组来解决此任务,则可能需要两次才能创建仅包含有效索引的压缩数组:

  1. 查找匹配项数,然后创建并填充紧凑数组
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
}
韦嘉颖
2023-03-14

如果我正确理解了您的查询,那么您需要一个包含所有索引 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的人来说,它可能很有用。如果答案被检查为好,事情就会变得简单。