簡體   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