当前位置: 首页 > 知识库问答 >
问题:

Java-基于另一个数组排序数组[重复]

姬浩渺
2023-03-14
int[] indices;
double[] relevance;
indices = {5, 8, 3, 2}
relevance = {0.1234, 0.3567, 0.2254, 0.0005}
{2, 5, 3, 8}

有没有更时髦的方法来解决这个问题?

共有1个答案

郁灿
2023-03-14

您可以创建一个同时包含相关性和索引的对象,并将该对象放在一个新列表中。现在,您可以根据相关性对列表进行排序,并获得相应的索引。

大概是这样的:

// Class holding relevance and index at the same time
public class RelevanceIndex {
  private int index;
  private double relevance;
  ...
}

// Create and populate a list of RelevanceIndex
List<RelevanceIndex> relevanceIndexes = new ArrayList<>();
for (int i = 0; i < indices.length; i++) {
  RelevanceIndex relevanceIndex = new RelevanceIndex();
  relevanceIndex.setIndex(indexes[i]);
  relevanceIndex.setRelevance(relevances[i]);
  relevanceIndexes.add(relevanceIndex);
}

...
// Sort relevanceIndexes by relevance using method sort of List
// (you need to define your Comparator or define RelevanceIndex as
// Comparable)
// Now you have the related indexes sorted. If necessary you can put them 
// in a new sorted array

编辑:添加了此答案的完整实现

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ArraySorting {

    public static void main(String[] args) {

        int[] indices = {5, 8, 3, 2};
        double[] relevance = {0.1234, 0.3567, 0.2254, 0.0005};

        ArraySorting app = new ArraySorting();
        app.run(indices, relevance);
    }

    void run(int[] indices, double[] relevance) {
        List<RelevanceIndex> relevanceIndices = getRelevanceIndices(indices, relevance);

        System.out.println(relevanceIndices);
        Collections.sort(relevanceIndices);
        System.out.println(relevanceIndices);
    }

    List<RelevanceIndex> getRelevanceIndices(int[] indices, double[] relevance) {
        List<RelevanceIndex> relevanceIndices = new ArrayList<>();
        for (int i = 0; i < indices.length; i++) {
            relevanceIndices.add(new RelevanceIndex(indices[i], relevance[i]));
        }
        return relevanceIndices;
    }

    class RelevanceIndex implements Comparable<RelevanceIndex> {
        private int index;
        private double relevance;

        RelevanceIndex(int index, double relevance) {
            this.index = index;
            this.relevance = relevance;
        }

        @Override
        public int compareTo(RelevanceIndex other) {
            return Double.compare(this.relevance, other.relevance);
        }

        @Override
        public String toString() {
            return String.format("%s (%s)", index, relevance);
        }
    }
}
 类似资料:
  • 我想根据另一个数组(索引)的排序顺序迭代两个数组(A,B),在本例中是10、34、32、21。 为这里的坏例子道歉。我已经更新了索引数组以消除混乱。 预期投入产出 但是,如果我将最后一行末尾的indexes[s]更改为indexes[indexOrder.indexOf(s)]。排序将给出错误的结果。如果ArrayList的索引与其值相同,为什么indexOf(s)会给出与s不同的结果。

  • 问题内容: 在PHP中可以做这样的事情吗?您将如何编写函数?这是一个例子。顺序是最重要的。 我想做类似的事情 因为最后我使用了foreach()并且它们的顺序不正确(因为我将值附加到需要正确顺序的字符串中,而且我事先也不知道所有的数组键/值)。 我看过PHP的内部数组函数,但似乎只能按字母或数字排序。 问题答案: 只需使用或即可。通过以给定的数组(按正确的顺序)开始并用实际数组中的数据覆盖/添加键

  • 我有2个java数组 如果我按升序对int数组排序,它将是: 现在我想相应地对名称数组进行排序。输出应为: 我该如何维持一段关系?我见过这个链接(基于其他排序的数组排序数组),但它是针对js的

  • 我想写一个时间O(n*lgk)的算法,将k个排序数组合并成一个排序数组,其中n是所有输入数组的元素总数。 你能告诉我怎么做吗? 编辑:我编写了以下算法: 你能告诉我这是否正确吗?

  • 我有这两个数组,我需要按ID订购第二个数组,就像第一个数组一样 如何根据第一个值重新订购第二个?我尝试了这个想法,但只适用于简单数组:https://develike.com/en/articles/sorting-an-array-by-values-based-on-another-array-in-php 有序ID数组: 无序数组: