我有一个字符串列表,比如
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
我通过以下步骤部分实现了解决方案:
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
但是解决方案有一些困难。
正如一个想法,而不是一个完整的解决方案:如果您愿意研究(或已经在使用)外部库,Apache Commons Collections提供了一个ComparatorChain,它可以帮助您将每个块的比较器链接在一起。当然,这是假设您在整个过程开始之前知道输入字符串的确切布局。
您当前的设计是“程序化的”——您编写代码是为了使用“固定”(不灵活)的数据结构。考虑在这里使用“真正的OO”设计。
关键是:是的,您的数据是作为具有某些属性的“原始字符串”进入的。但是:这并不意味着您必须始终将数据视为字符串。
相反,您可以对表示此类数据的类进行建模。这也允许分离不同的关注点:一个类负责解析传入的字符串并将它们转换为特定的对象;然后您可以在每个这样的类中实现一个合理的equals()方法。
这样,您将使字符串的各种属性成为表示它的类的“完全限定”属性;而不是做所有这些隐式的“字符串中有‘列’;需要这样/那样处理”。
为什么不用一个类似这样的比较器对列表进行排序:
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中实现: 要以相反的顺序排序,只需交换参数即可: 或简单地
本文向大家介绍α测试是什么?相关面试题,主要包含被问及α测试是什么?时的应答技巧和注意事项,需要的朋友参考一下 是由一个用户在开发环境下进行的测试,可以是公司内部的用户在模拟实际操作环境下进行的受控测试,α测试不能由程序员和测试员完成。α测试发现的错误,可以在测试现场立即反馈给开发人员,由其分析和处理。目的是评价软件的功能、可使用性、可靠性、性能和支持。尤其注重产品的界面和特色。可在编码结束/子模