Cómo eliminar duplicados en las filas de la matriz

Quiero quitar filas duplicadas de una matriz. He leído ¿Cómo puedo eliminar los duplicados en una matriz, pero mantener el mismo orden?, pero esto no es exactamente lo que quiero.

La solución anterior quita los valores duplicados (a partir de células de la matriz y devuelve un vector), pero necesito eliminar duplicados filas y devolver una matriz de la misma matriz, sin filas duplicadas.

Ejemplo:

a = [1,2; 3,4; 5,6; 1,2; 7,8]

a =
     1     2
     3     4
     5     6
     1     2
     7     8

%...

ans =
     1     2
     3     4
     5     6
     7     8

El orden no importa.

si usted también desea conservar el original de la orden de las filas, echa un vistazo a esta respuesta: stackoverflow.com/questions/7781749/…

OriginalEl autor nosbor | 2011-11-10

2 respuestas

  1. -1

    Aquí está mi solución

    package com.test;
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;
    public class DuplicateInMatrix {
    public static void main(String[] args) {
    Integer[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 1, 2, 3 } };
    Set<Element> set = new HashSet<>();
    for (int i = 0; i < arr.length; i++) {
    set.add(new Element(arr.length, arr[i]));
    }
    buildResultArray(set);
    }
    private static void buildResultArray(Set<Element> set) {
    Integer[][] arr = new Integer[set.size()][];
    Iterator<Element> itr = set.iterator();
    for (int i = 0; i < arr.length && itr.hasNext(); i++) {
    arr[i] = itr.next().row;
    }
    printArrray(arr);
    }
    private static void printArrray(Integer[][] arr) {
    for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
    System.out.print(arr[i][j] + " ");
    }
    System.out.println();
    }
    }
    static class Element {
    int n;
    Integer[] row = new Integer[n];
    public Element(int n, Integer[] row) {
    this.n = n;
    this.row = row;
    }
    @Override
    public int hashCode() {
    return Arrays.hashCode(row);
    }
    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    Element other = (Element) obj;
    return Arrays.deepEquals(this.row, other.row);
    }
    @Override
    public String toString() {
    return Arrays.toString(row);
    }
    }
    }

    OriginalEl autor Surinder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *