Android多基本类型数组按单个数组排序问题求助
解决多数组按指定数组关联排序的问题
嘿,我完全懂你现在的困扰——要给多个基本类型数组排序,还得严格跟着arr3的升序保持所有数组元素的对应关系,之前试过的方法最多只能处理两个数组,确实没法满足多数组的场景。别慌,咱们用索引数组排序法就能完美解决这个问题,这是处理这类需求最通用、最靠谱的思路之一。
核心思路
基本类型数组本身没法直接绑定关联信息,所以我们可以用一个「索引数组」作为中间桥梁:
- 先创建一个和arr3长度一致的索引数组,里面存的是0到数组长度-1的序号
- 按照arr3中对应位置的元素大小,对这个索引数组进行排序
- 最后根据排序后的索引数组,重新排列所有其他数组的元素,这样所有数组的元素关联关系就完全和arr3的排序对应上了
示例代码(Java版本)
假设我们有int、double等不同类型的基本数组,按arr3升序排序:
import java.util.Arrays; import java.util.stream.IntStream; public class MultiArraySort { public static void main(String[] args) { // 待排序的关联数组 int[] arr1 = {5, 2, 8, 1}; double[] arr2 = {3.1, 1.5, 4.2, 0.8}; int[] arr3 = {3, 1, 4, 2}; // 按此数组升序排序 // 1. 创建索引数组:[0,1,2,3] int[] indices = IntStream.range(0, arr3.length).toArray(); // 2. 根据arr3的元素值对索引数组排序 Arrays.sort(indices, (i, j) -> Integer.compare(arr3[i], arr3[j])); // 排序后indices变成:[1,3,0,2],对应arr3的升序元素1,2,3,4 // 3. 根据排序后的索引重排所有数组 int[] sortedArr1 = reorderArray(arr1, indices); double[] sortedArr2 = reorderArray(arr2, indices); int[] sortedArr3 = reorderArray(arr3, indices); // 验证结果 System.out.println("排序后的arr1: " + Arrays.toString(sortedArr1)); // [2,1,5,8] System.out.println("排序后的arr2: " + Arrays.toString(sortedArr2)); // [1.5,0.8,3.1,4.2] System.out.println("排序后的arr3: " + Arrays.toString(sortedArr3)); // [1,2,3,4] } // 针对int数组的重排工具方法 private static int[] reorderArray(int[] original, int[] indices) { int[] sorted = new int[original.length]; for (int i = 0; i < indices.length; i++) { sorted[i] = original[indices[i]]; } return sorted; } // 针对double数组的重排工具方法,其他基本类型可同理扩展 private static double[] reorderArray(double[] original, int[] indices) { double[] sorted = new double[original.length]; for (int i = 0; i < indices.length; i++) { sorted[i] = original[indices[i]]; } return sorted; } }
示例代码(Python版本)
如果是用Python,思路完全一致,代码会更简洁:
arr1 = [5, 2, 8, 1] arr2 = [3.1, 1.5, 4.2, 0.8] arr3 = [3, 1, 4, 2] # 生成排序后的索引数组:按arr3的元素值排序对应的索引 sorted_indices = sorted(range(len(arr3)), key=lambda x: arr3[x]) # 根据索引重排所有数组 sorted_arr1 = [arr1[i] for i in sorted_indices] sorted_arr2 = [arr2[i] for i in sorted_indices] sorted_arr3 = [arr3[i] for i in sorted_indices] print("排序后的arr1:", sorted_arr1) # [2, 1, 5, 8] print("排序后的arr2:", sorted_arr2) # [1.5, 0.8, 3.1, 4.2] print("排序后的arr3:", sorted_arr3) # [1, 2, 3, 4]
方法优势
- 支持任意数量的数组,不管你有3个还是10个,只要跟着索引数组重排就行
- 完美适配基本类型数组,不需要把元素包装成对象(比如Java里的Integer)
- 逻辑清晰,扩展方便——如果新增数组,只需要调用对应的重排方法(Java)或者加一行列表推导(Python)
内容的提问来源于stack exchange,提问作者Darksymphony
相关产品推荐
相关产品推荐

