基于先前排序的数组android java对字符串数组进行排序

时间:2016-10-17 15:57:37

标签: java android arrays

你好,我有2个字符串数组

private String names[] = {
    "Drinks",
    "Bikes",
    "Cars"};

private String desc[] = {
    "this is drinks package",
    "package for bikes",
    "package cars"};

// now i used 
Arrays.sort(names);

既然名称是正确的A - Z顺序,我如何根据“名称”数组排序“desc”数组?例如,在排序数组“名称”结果后:

Bikes,Cars,Drinks

现在我希望desc数组以相同的方式格式化,因此正确的“desc”位于正确的“名称”上。结果应为:

names = "Bikes,Cars,Drinks"
desc = "package for bikes","package cars,this is drinks package"

我们可以这样做吗?

标记是重复的,这不是下降的重复

2 个答案:

答案 0 :(得分:1)

您的目标是将键(名称数组)链接到值(descr数组)。

您可以通过两种方式实现它:

使用二维数组:

String[][] myItems = new String[][] {
  {"Drinks", "This is drink package"},
  {"Cars", "package cars"},
  {"Bikes", "package for bikes"},
  ...
};

现在您可以对其进行排序following this example或其他任何其他

使用AbstractMap.SimpleEntry

有了这个,您只需要创建一个AbstractMap.SimpleEntry<String, String>的一维数组并对其进行排序。您可以按照我为此目标链接的文档。

希望这有帮助

注意

如果两个阵列之间没有逻辑,则无法链接它们。在你的例子中,它可以通过在第二个数组中搜索第一个数组的关键字来完成,但由于你没有说任何关于任何&#34;必须有&#34;对于desc数组,我们必须假设一个&#34; kid&#34;条目可以链接到&#34; baby package&#34; descr,所以你无法通过搜索&#34; kid&#34;来找到它。希望我以一种体面的方式解释

答案 1 :(得分:1)

为什么不使用课程?

Object-Oriented Principles一样,当您拥有与特定主题相关的数据时,您可以将它们放在一个类中。

示例:

实现Comparable interface

的NameDescription类
public class NameDescription implements Comparable<NameDescription> {
    private String name;
    private String description;

    public NameDescription(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public int compareTo(NameDescription o) {
        return name.compareTo(o.getName());
    }
}

可比较的界面提供compareTo方法,使您能够定义比较公式以将当前对象与另一个对象进行比较(它们甚至不需要是相同的类型)。 Arrays.sort方法使用compareTo方法对元素进行排序,这样就可以将数据放在一起,任何排序方法都可以根据compareTo方法为您提供一致的结果。

分拣机类:

public class Sorter {

    public static void main(String[] args) {
        NameDescription namesDescriptions[] = {
                new NameDescription("Drinks", "this is drinks package"),
                new NameDescription("Bikes", "package for bikes"),
                new NameDescription("Cars", "package cars"),
            };

        Arrays.sort(namesDescriptions);

        // ASCENDING
        for(int i=0; i<namesDescriptions.length; i++) {
            System.out.println(namesDescriptions[i].getName());
        }
        for(int i=0; i<namesDescriptions.length; i++) {
            System.out.println(namesDescriptions[i].getDescription());
        }

        System.out.println("---------");

        // DESCENDING
        for(int i=namesDescriptions.length-1; i>=0; i--) {
            System.out.println(namesDescriptions[i].getName());
        }
        for(int i=namesDescriptions.length-1; i>=0; i--) {
            System.out.println(namesDescriptions[i].getDescription());
        }

        // To save them in separate arrays
        String[] names = new String[namesDescriptions.length];
        String[] desc = new String[namesDescriptions.length];
        String[] imageid = new String[namesDescriptions.length];
        for(int i=0; i<namesDescriptions.length; i++) { 
            names[i] = namesDescriptions[namesDescriptions.length-i-1].getName();
            desc[i] = namesDescriptions[namesDescriptions.length-i-1].getDescription();
            imageid[i] = namesDescriptions[namesDescriptions.length-i-1].getimg();
        }
    }

}