java - 如何在保留初始索引的同时对这些值进行排序?

标签 java c++ c arrays sorting

我想在剧院安排 4 人一组,让他们坐在一起,或者让最多的人坐在一起。我有一个行数组,其中索引代表存储该行中有多少个可用座位的行。如果我使用排序方法,那么它将对可用座位进行排序,但我将丢失它对应的行。显然,我可以遍历它寻找我想要的最大座位数,如果找不到,我可以减少我的座位数等等,但这不是最佳选择。

行:1 2 3 4

可用:2 3 1 4

排序可用:4 3 2 1

对应行:4 2 1 3 <- 这就是我想要的

//this is one way to do it but i want a better way
int[] row = {0, 2, 3, 1, 4};
double[] rowDouble = new double[row.length];

for (int i = 0; i < row.length; i++)
{
    String rowString = Integer.toString(row[i]) + "." + Integer.toString(i);
    rowDouble[i] = Double.valueOf(rowString);
}

Arrays.sort(rowDouble);
String sortedRowString = Arrays.toString(rowDouble);
sortedRowString = sortedRowString.substring(1, sortedRowString.length()-1);

System.out.println(sortedRowString);
String[] finalSortedRowString = sortedRowString.split(", ");

for (int i = finalSortedRowString.length-1; i > 0; i--)
{
    System.out.println(finalSortedRowString[i].split("\\.")[1]);
}

最佳答案

我认为您采用了错误的范式来解决这个问题。 Java 是一种面向对象的语言,您应该这样使用它。

public Class Row {
    private int available;
    private int rownum;
    public Row(int avail, int rown) { /*...*/ }
    public int compareTo(Row otherRow) { /*...*/ }
    public int checkAvailable() { /*...*/ }
    public int addPerson() { /*...*/ }
    public int addSeat() { /*...*/ }
    public int addParty(int size) { /*...*/ }
}

然后您可以使用众多可用的 Java 集合之一来保存它们并根据需要对其进行排序。这是一些额外的编码,但它将允许更健壮和可扩展的实现。例如:如果您的行有两个可用座位,但它们在两端怎么办?您当前的实现必须完全清除。在这里,您只需更改几个地方的逻辑,然后 BAM,您就拥有了 v2。

请认真考虑使用对您有利的语言。不要将 java 用作脚本语言,这不是它的用途。

关于java - 如何在保留初始索引的同时对这些值进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12483188/

相关文章:

c - 如何乘以十六分之三

c - 对操作系统内核链接的 undefined reference

java - 如何在 swing 应用程序中模拟 Ctrl + Shift + f1 并写入日志文件

java - 允许用户搜索并滚动到 ListView

java - 安装 MongoDB Java 驱动程序

c++ - 删除和替换新的 IR 代码时指令不支配所有用途

java - 验证没有分隔符的 UUID "-"

c++ - 将整数转换为字符串

c++ - 强制 C++ 结构紧密打包

C:指针困惑