java - 如何过滤 char 矩阵以获得带有过滤结果的较小矩阵?

标签 java arrays matrix

给定矩阵 A:

[[C,c,c,c,a,a,b],
 [1,3,3,3,2,2,1]]

其中第一行包含字符 A-Z 和 a-z,第二行包含代表给定字母在矩阵中出现次数的数字,如何编写代码来获取矩阵 A 并将其转换为矩阵 B,其中 B 为:

[[C,c,a,b],
 [1,3,2,1]]

其中第一行没有显示重复的字母,但第二行保留字母重复的原始次数?

这是我迄今为止尝试过的:

for(i=0;i<matrixA.length;i++){
   if(matrixA[0][0] == matrixA[0][1]){  
   matrixB[0][0] = matrixA[0][0]
   matrixB[1][0] = matrixA[1][0]
   }
}

如何解决这个问题?

最佳答案

我意识到您不能简单地删除数组中的重复项,因为您的 matrixB 将是:

[[C, c, a, b],
 [1, 3, 2]] //final '1' removed as it is a "duplicate" of the first

所以我建议采用这种方法:

Object[][] matrixA = {
    {'C','c','c','c','a','a','b'},
    {1,3,3,3,2,2,1}};
ArrayList<Object> rowHolder = new ArrayList<>();

for(int i = 0; i < matrixA.length; i++){ //for each row
    int j;
    for(j = 0; j < matrixA[i].length-1; j++){ //for each element
        if(matrixA[i][j] != matrixA[i][j+1]) //keep element if next element is different
            rowHolder.add(matrixA[i][j]);
    }
    rowHolder.add(matrixA[i][j]); //add last element always (next element doesn't exist)
    matrixA[i] = rowHolder.toArray(); //convert rowHolder to row
    rowHolder.clear(); //reset for next row
    System.out.println(Arrays.toString(matrixA[i]));
}

这给出了预期的:

[C, c, a, b]
[1, 3, 2, 1]
<小时/>

这里唯一的丑陋之处是必须对矩阵和 ArrayList 类型使用 Object 。这是由于混合类型的二维数组以及 Java 中基元和对象之间转换的限制。如果您使用自定义转换器而不是 ArrayList#toArray,则可以使 matrixAint[] 类型,并且 rowHolder 具有通用参数 Integer。 .

关于java - 如何过滤 char 矩阵以获得带有过滤结果的较小矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43971734/

相关文章:

java - 尽管缺少输入,但在处理中接收到恒定输入 - Java

java - 使用静态方法处理最终类

r - 在 R 中粘贴矩阵

R 函数和 Rcpp 函数计算最近正定矩阵的结果不同

matlab - 将旧矩阵复制到新矩阵的快速方法

Java将日期时间从 "yyyy-MM-dd HH:mm:ss.SSSSSSS"转换为 "yyyy-MM-dd HH:mm:ss.S"或从 "yyyy-MM-dd HH:mm:ss.SSSSSSS"转换为 "yyyy-MM-dd HH:mm:ss.SSS"

关于引用方法和变量的 Java 约定

java - 没有初始大小的字符串数组给出空指针异常

javascript - 我如何在java脚本中找到一个句子中单词的出现次数

arrays - 在 matlab 中创建 3D 矩阵