繁体   English   中英

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

[英]How do I sort these values while retaining initial index?

我想在一个剧院里坐4个人,这样他们可以排成一排,或者最多的人彼此相邻。 我有一个行数组,其中索引代表该行,该行存储该行中有多少个可用座位。 如果我使用了sort方法,那么它将对可用座位进行排序,但是我将丢失它对应的行。 显然,我可以遍历它以寻找所需的最大座位数,如果找不到,可以减少座位数,依此类推,但这不是最佳选择。

行: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作为脚本语言,这不是它的用途。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM