我有一个二维的String数组。这是一个矩阵。我需要对这个矩阵进行排序并在第一行中保存唯一的项目其他Matrix.How这样做只使用自己的arlgorithm。我的意思是不要调用一个方法,而是编写循环本身,它将排序并比较数组的元素
getProjectInfo(id): Observable<any> {
const URL = `${this.API}/${id}`;
return this.http.get(URL)
.pipe(map(res => res)
.catch(err => this.handleError('getProjInfo', URL)));
}
答案 0 :(得分:0)
如何将Map
与计数元素一起使用:
public static String[] getUnique(String[][] matrix) {
Map<String, Integer> map = new LinkedHashMap<>();
for (String[] row : matrix)
for (String col : row)
map.put(col, map.getOrDefault(col, 0) + 1);
List<String> unique = new ArrayList<>();
for (Map.Entry<String, Integer> entry : map.entrySet())
if (entry.getValue() == 1)
unique.add(entry.getKey());
return unique.toArray(new String[unique.size()]);
}
如果您不想使用Map
,那么您只需稍微做一些同样的事情:
public static String[] getUnique(String[][] matrix) {
List<String> unique = new ArrayList<>();
for (int row = 0; row < matrix.length; row++) {
for (int col = 0; col < matrix[row].length; col++) {
if (matrix[row][col] == null)
continue;
boolean foundUnique = true;
for (int i = row; i < matrix.length; i++) {
for (int j = i == row ? col : 0; j < matrix[i].length; j++) {
if (matrix[i][j] == null || (i == row && j == col))
continue;
if (matrix[i][j].equals(matrix[row][col])) {
foundUnique = false;
matrix[i][j] = null;
}
}
}
if (foundUnique)
unique.add(matrix[row][col]);
else
matrix[row][col] = null;
}
}
return unique.toArray(new String[unique.size()]);
}
甚至不使用List
: - ):
public static String[] getUnique(String[][] matrix) {
int total = 0;
for (int row = 0; row < matrix.length; row++) {
for (int col = 0; col < matrix[row].length; col++) {
if (matrix[row][col] == null)
continue;
boolean foundUnique = true;
for (int i = row; i < matrix.length; i++) {
for (int j = i == row ? col : 0; j < matrix[i].length; j++) {
if (matrix[i][j] == null || (i == row && j == col))
continue;
if (matrix[i][j].equals(matrix[row][col])) {
foundUnique = false;
matrix[i][j] = null;
}
}
}
if (foundUnique)
total++;
else
matrix[row][col] = null;
}
}
if (total == 0)
return new String[0];
String[] res = new String[total];
for (int row = 0, i = 0; row < matrix.length; row++)
for (int col = 0; col < matrix[row].length; col++)
if (matrix[row][col] != null)
res[i++] = matrix[row][col];
return res;
}