首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法对Integer数组进行排序,并对另一个字符串数组进行相同的更改

有没有办法对Integer数组进行排序,并对另一个字符串数组进行相同的更改
EN

Stack Overflow用户
提问于 2019-11-13 17:59:37
回答 4查看 87关注 0票数 0

我正在做一个学校项目,而不是让我做一个程序,而不是拿一个字符串,然后计算字符串中所有单词出现的次数。我已经成功地做到了这一点,通过对数组进行处理。一个数组是字符串数组,它保存单词和其他Integer数组,该数组保存单词出现的次数。一个特定的单词及其出现的次数在两个数组中具有相同的元素编号。

但我的问题是将它们按降序排序,我一开始以为我可以使用下面这行代码来实现:

代码语言:javascript
运行
复制
 Arrays.sort(thenumbers, Collections.reverseOrder()); 

但我意识到这会对单词出现的次数进行排序,但这会毁了整个程序,因为单词和数字在数组中会有不同的元素编号。

有没有办法解决这个问题?

如有任何帮助,将不胜感激,谢谢!

EN

回答 4

Stack Overflow用户

发布于 2019-11-13 18:29:54

如果您只想对数组执行此操作,而不使用Map,以便单词with count在同一对象中不相关,则可以实现一个自定义bublesort,它根据count数组对两个数组进行排序。

例如:

代码语言:javascript
运行
复制
static void bubbleSort(String[] words, int[] wordCount) {
    int n = wordCount.length;
    String wordTemp = null;
    int countTemp = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 1; j < (n - i); j++) {
            if (wordCount[j - 1] < wordCount[j]) { // < for reverse order, > for ascend
                //swap words elements
                wordTemp = words[j-1];
                words[j-1] = words[j];
                words[j] = wordTemp;
                //swap wordcount elements
                countTemp = wordCount[j - 1];
                wordCount[j - 1] = wordCount[j];
                wordCount[j] = countTemp;
            }
        }
    }
}

它将在wordCount上应用bublesort算法(它保存每个单词的出现次数,并且在wordCount排序的同时,它将对单词进行排序。

运行以下示例,如

代码语言:javascript
运行
复制
String [] words = {"four", "one", "five", "three", "six", "two"};
int [] wordCount = {4, 1, 5, 3, 6, 2};
bubbleSort(words, wordCount);
System.out.println("Words: " + Arrays.toString(words));
System.out.println("Word Count: " + Arrays.toString(wordCount));

产生

代码语言:javascript
运行
复制
Words: [six, five, four, three, two, one]
Word Count: [6, 5, 4, 3, 2, 1]
票数 0
EN

Stack Overflow用户

发布于 2019-11-13 18:34:57

你不需要创建两个独立的数组。使用stream API可以很标准地找到每个单词在字符串中出现的次数:

代码语言:javascript
运行
复制
import static java.util.stream.Collectors.*;

Map<String, Long> map = Arrays.stream(sourceString.split(" "))
        .collect(groupingBy(Function.identity(), counting()))

这为您提供了一个以word为键的映射,以及它作为值出现的次数。然后,您可以使用Sort a Map by values中的任意解决方案按值对地图进行排序

票数 0
EN

Stack Overflow用户

发布于 2019-11-13 18:38:07

不同的答案是:做一个真正的OOP设计。

您在这里所做的是:您将数据放在两个不同的位置,然后通过在这两个数组中使用相同的索引,手动将相应的项“映射”在一起。

这基本上就是:过程性编程。

OOP的答案是:创建一个类来表示单个单词及其出现次数!然后,您可以实现可比较接口,并一次性对这些对象的列表进行排序!

含义:其他答案在技术上都是正确的,因为它们告诉您如何在当前设计的情况下解决问题。但真正的答案是:用一些不同的东西替换您当前的设计,这将实现一个简单得多的解决方案!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58834501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档