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

排序数组字符串数组列表

梁韬
2023-03-14

我有一个程序,它接受一个单词和一个文本文件字典,并在字典中搜索与给定单词相等的单词组合(是字母表)。

我最后得到了一个字符串数组的Arraylist,每个数组都是一个包含它所使用的单词的解决方案,Arraylist是所有的解决方案。

List<String> list = Arrays.asList(array);
list.sort(Comparator.comparing(String::length).reversed().thenComparing(String::compareTo));

它首先按字长(降序)排序,然后对等长字使用字母排序。

我现在对各个数组进行了排序,但我正试图按照某些规则在arraylist中对它们进行排序:

  • 按字数递增
  • 对于包含相同数量单词且所有单词长度相同的数组,将按字母顺序排序。
  • 等字数,但长度不同:最长的不等长优先。例如,如果A[0]长度==b[0]长度,但b[1]长度>A[1]长度,则b在第一位。

共有1个答案

栾英资
2023-03-14

首先,不需要为了排序而将数组转换为list

其次,您应该使用thencomparator.NaturalOrder())而不是thencomparator(String::CompareTo),因为这将使用一个单一的比较器,而不是创建一个委托给方法引用的新的比较器

至于您的问题,我不认为有一个比较器,所以创建您自己的。使用thencomparate()构建复合比较器是很好的,但并不总是正确的方法。

因此,您的代码可以是(假设您的排序标准正确):

List<String[]> solutions = /* code here */;

// First, sort each individual solution (array)
for (String[] solution : solutions) {
    Arrays.sort(solution, Comparator.comparing(String::length)
                                    .reversed()
                                    .thenComparing(Comparator.naturalOrder()));
}

// Second, sort the solutions (list)
solutions.sort((solution1, solution2) -> {
        // 1) By number of words (ascending)
        int cmp = Integer.compare(solution1.length, solution2.length);
        // 2) By length of word (descending)
        for (int i = 0; cmp == 0 && i < solution1.length; i++)
            cmp = Integer.compare(solution2[i].length(), solution1[i].length());
        // 3) Alphabetically (ascending)
        for (int i = 0; cmp == 0 && i < solution1.length; i++)
            cmp = solution1[i].compareTo(solution2[i]);
        return cmp;
});
 类似资料:
  • 在我看来最好的情况应该是O(log n),但不确定最坏的情况...也许O(n^2)一次只能匹配一个字母。 谁能给我更多的点子吗?

  • 我正在玩排序数组,我弄清楚了如何对int数组进行合并排序。但是我不知道合并字符串数组。在正常排序时,对字符串数组进行排序很容易,但合并排序不同。我到目前为止所做的代码如下,正在处理int数组。

  • 问题内容: 我有一个数组 并且需要对其进行排序,使其看起来像; 我尝试了排序功能; 但这给出了命令 我试图考虑一个正则表达式可以正常工作,但无法解决这个问题。 如果有帮助,格式将始终为2个字母,x个数字,然后是任意数量的字符。 问题答案: 这称为“自然排序”,可以像这样在JS中实现: 要以相反的顺序排序,只需交换参数即可: 或简单地

  • 对于这个项目,我得到了一个字符串数组和一个整数数组。int[1]是字符串[1]的排名。我需要使用mergesort按1到n的顺序对int数组进行排序,我在下面已经完成了这项工作。但是当int数组被移动时,我还需要切换字符串数组的位置,以便它们都被排序,如果这有意义的话?我不知道我的编码有什么问题,甚至我的想法是否真的有效,但我一直在stringSorted[k]=stringRight[j]上得到

  • 问题内容: 我有一个包含多个数组的数组,我想根据这些数组中的某个字符串对数组进行排序。 如何按名称排序,以便 阿尔伯特排 在首位, 齐默尔曼排 在最后? 我知道如果可以使用整数进行排序,但是字符串使我毫无头绪,该怎么办。 谢谢您帮忙!:) 问题答案: 这可以通过将支持函数作为参数传递给方法调用来实现。 像这样:

  • 本文向大家介绍Swift对字符串数组进行排序,包括了Swift对字符串数组进行排序的使用技巧和注意事项,需要的朋友参考一下 例子 3.0 最简单的方法是使用sorted(): 或者 sort() 您可以将闭包作为排序参数: 尾随闭包的替代语法: 但是,如果数组中的元素不一致,则会出现意外结果: 要解决此问题,请对元素的小写版本进行排序: 或者import Foundation使用NSString的