根据一个数组对两个数组进行排序

时间:2016-05-30 10:17:57

标签: java arrays algorithm sorting

我有三个阵列:

appNames
packageNames 
appIcons

这里的app name是一个字符串,包名也是字符串,但包名和appIcons是文件类型。我想在列表中显示所有这三个东西,但是按照appNames的顺序。

现在,我想按字母顺序对这个数组进行排序,还有其他两个数组,具体取决于此。

我在Java工作,并寻找一些简单的方法。 PHP有一个名为array_multisort()的内容。

2 个答案:

答案 0 :(得分:2)

本机Java方法是将来自三个并行数组的值捆绑到单个数组或具有三个字段的对象列表中,使用自定义比较器对其进行排序,然后将值重新分配回三个数组。

不需要新类的方法是创建索引数组,使用自定义比较器对其进行排序,并使用生成的索引顺序对三个数组进行重新排序。

例如,如果您的数组看起来像这样

a = {"quick", "brown", "fox"};
b = { 5, 10, 1};
c = {.1, .7, .2};

你的未排序索引数组看起来像这样

i = {0, 1, 2} // Indexes of quick, brown, fox

你的排序索引数组看起来像这样

i = {1, 2, 0} // Indexes of brown, fox, quick

此时,您可以遍历已排序的索引数组,并为abc创建新数组:

a1 = {"brown", "fox", "quick"}
b1 = {10, 1, 5}
c1 = {.7, .2, .1}

答案 1 :(得分:1)

不是一种超级有效的排序方式,但如果数组不大,可以采用旧的方式进行排序

for (int i=0; i< appNames.lenght; i++)}
 for (int j=i+1; j< appNames.lenght; j++){
    if (appNames[i].compare(appNames[j])<0){
      // switch i and j in all arrays
      String temp= appNames[i];
      appNames[i]=appNames[j];
      appNames[j]=temp;

      temp= packageNames[i];
      packageNames[i]=packageNames[j];
      packageNames[j]=temp;

      temp= appIcons[i];
      appIcons[i]=appIcons[j];
      appIcons[j]=temp;
    }
  }
}