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

α-数字排序

甄鹏云
2023-03-14

我有一个字符串列表,比如

00785-LT-SUN(4)-SE-FD-1511  
00785-LT-SUN(4)-SE-FD-151  
00785-LT-SUN(4)-SE-FD-152  
00785-LT-SUN(4)-SE-FD-1513

当对这些字符串应用常规排序时,它们的排序如下

00785-LT-SUN(4)-SE-FD-151  
00785-LT-SUN(4)-SE-FD-1511  
00785-LT-SUN(4)-SE-FD-1513
00785-LT-SUN(4)-SE-FD-152

而不是

00785-LT-SUN(4)-SE-FD-151  
00785-LT-SUN(4)-SE-FD-152
00785-LT-SUN(4)-SE-FD-1511  
00785-LT-SUN(4)-SE-FD-1513

我通过以下步骤部分实现了解决方案:

  1. 分隔所有字符、数字和特殊字符。
private static final Pattern VALID_PATTERN =   
               Pattern.compile ( "[0-9]+|[A-Z]+|[-()/.,:;]+|[\\s]+" );  
private List<String> parse(String toParse) {
        List<String> chunks = new LinkedList<> ();
        Matcher matcher = VALID_PATTERN.matcher(toParse);
        while (matcher.find()) {
            chunks.add( matcher.group() );
        }
        return chunks;
    }

3、每个代表字符串的列表都被添加到一个列表中

for (int i = 0 ;i < chunks.size () ;i++)
    listListString .add ( parse ( chunks.get ( i ) ) );

4、应用于特定列的实际排序

public List<List<String>> Compare (List<List<String>> var_listArrayList ,
                                        int Col )
    {
        final int col_num = Col;
//this method can be overloaded to sort integers
            Collections.sort ( var_listArrayList,

                           new Comparator< List< String > > ( )
                           {

                               @Override
                               public
                               int compare ( List< String > a,
                                             List< String > b )
                               {

                                   return a.get ( col_num )
                                           .compareTo ( b.get ( col_num ) );
                               }
                           } );

        return var_listArrayList ;
    }

实际问题:尽管执行了上述所有步骤,但结果仍然并没有达到预期。

可能的解决方案是按以下步骤进行:

static final Comparator< StringEncapsulator > ORDER_BY_COLS = new Comparator< StringEncapsulator >() {
    public int compare(StringEncapsulator a1, StringEncapsulator a2) {
        int i = ORDER_BY_COL1.compare(a1,a2);
        if(i == 0){
            i = ORDER_BY_COL2.compare(a1,a2);
            if(i == 0){
                i = ORDER_BY_COL3.compare(a1,a2);
                :
                :
                :
            }
        }
        return i;
    }
};  //the class here represents the encapsulated structure of the string

但是解决方案有一些困难。

  • 字符串可能并不总是具有相同的格式,这意味着我必须为遇到的每种类型的字符串创建不同类型的类

共有3个答案

陆建木
2023-03-14

正如一个想法,而不是一个完整的解决方案:如果您愿意研究(或已经在使用)外部库,Apache Commons Collections提供了一个ComparatorChain,它可以帮助您将每个块的比较器链接在一起。当然,这是假设您在整个过程开始之前知道输入字符串的确切布局。

东郭海阳
2023-03-14

您当前的设计是“程序化的”——您编写代码是为了使用“固定”(不灵活)的数据结构。考虑在这里使用“真正的OO”设计。

关键是:是的,您的数据是作为具有某些属性的“原始字符串”进入的。但是:这并不意味着您必须始终将数据视为字符串。

相反,您可以对表示此类数据的类进行建模。这也允许分离不同的关注点:一个类负责解析传入的字符串并将它们转换为特定的对象;然后您可以在每个这样的类中实现一个合理的equals()方法。

这样,您将使字符串的各种属性成为表示它的类的“完全限定”属性;而不是做所有这些隐式的“字符串中有‘列’;需要这样/那样处理”。

益智明
2023-03-14

为什么不用一个类似这样的比较器对列表进行排序:

new Comparator<String> ( )
{
  @Override
  public
  int compare (String a, String b)
  {
    String[] myAArray = a.split("-");
    Integer myAInt = Integer.parseInt(myAArray [myAArray.length - 1]);

    String[] myBArray = b.split("-");
    Integer myBInt = Integer.parseInt(myBArray [myBArray.length - 1]);

    return myAInt > myBInt ;
  }
}
 类似资料:
  • 我写了一个函数,它接受两个参数: > JPG图像作为3D数组 α给出的旋转度我的方法是: 公共静态整数[][]旋转(整数[][]img,双alpha){双rad=Math.toRadians(alpha);双sin=Math.sin(rad);双cos=Math.cos(rad); } 在固定索引范围的同时,输出是一个黑色的图像。我错过了什么?

  • 本文向大家介绍javascript排序函数实现数字排序,包括了javascript排序函数实现数字排序的使用技巧和注意事项,需要的朋友参考一下 javascript排序函数实现数字排序 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 我已经使用alpha-beta-minimax实现了JavaScript。它适用于3x3板,但当我将板更改为4x4或更高时,程序似乎挂起。 更新:当可用移动超过10时,程序无效 下面是alpha-beta-minimax函数: CheckForWinner()返回: 0代表不平不赢 1换领带 2代表玩家获胜 3代表电脑获胜 谢谢你的帮助

  • 问题内容: 我有一个混合数组,需要按字母然后按数字排序 我如何将其排序为: 我努力了 但这只是按字母顺序排序。可以使用直接的JavaScript或jQuery完成此操作吗? 问题答案:

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

  • 本文向大家介绍α测试是什么?相关面试题,主要包含被问及α测试是什么?时的应答技巧和注意事项,需要的朋友参考一下 是由一个用户在开发环境下进行的测试,可以是公司内部的用户在模拟实际操作环境下进行的受控测试,α测试不能由程序员和测试员完成。α测试发现的错误,可以在测试现场立即反馈给开发人员,由其分析和处理。目的是评价软件的功能、可使用性、可靠性、性能和支持。尤其注重产品的界面和特色。可在编码结束/子模