在 Haxe 中反转字符串

wof*_*wof 4 string haxe

在 Haxe 中反转字符串的其他选项是什么?我介绍我的(简单、清晰和初学者一样):

class ReverseString {

    public static function main() {

        Sys.println("Enter some words: ");
        // Lets read some input!
        var someWord = Sys.stdin().readLine();

        // Split string to array, reverse string, and join again
        var stringArray:Array<String> = someWord.split("");
        stringArray.reverse();
        var reversedString = stringArray.join("");

        // And finally, enjoy the reversed string:
        Sys.print("Reversed word looks like this: ");
        Sys.println(reversedString);
    }
}
Run Code Online (Sandbox Code Playgroud)

Avt*_*t'W 5

与其他一些方法相比,使用 split() 速度较慢,尤其是在字符串足够大的情况下。

下面的测试是在我的计算机上为 Neko 目标完成的,使用 Haxe 2.10 编译。让我们首先测试一个 6 个字符的字符串(“abcdef”)。

带有拆分/连接的实现 A大约需要(0.030 毫秒):

var s = "abcdef"; 
var a = s.split(''); 
a.reverse(); 
s = a.join('');

// s contains "fedcba"
Run Code Online (Sandbox Code Playgroud)

如果不比解决方案 A 慢(0.032 毫秒),则实现 B 的运行速度几乎同样慢:

var s = "abcdef";
var s2 = ""; 
for (i in -s.length+1...1) 
    s2 += s.charAt(-i);

// s2 contains "fedcba"
Run Code Online (Sandbox Code Playgroud)

实现 C比实现 A 快 5 倍(0.006 毫秒):

import StringBuf;
using StringTools;

var s = "abcdef"; 
var s2 = new StringBuf(); 
for (i in -s.length+1...1) 
     s2.add(s.charAt(-i)); 

// s2.toString() contains "fedcba"
Run Code Online (Sandbox Code Playgroud)

实现 D看起来最快,大约比实现 A 快 16 倍(0.002 毫秒):

import StringBuf;
using StringTools;

var s = "abcdef"; 
var s2 = new StringBuf(); 
for (i in -s.length+1...1) 
     s2.addChar(s.fastCodeAt(-i)); 

// s2.toString() contains "fedcba"
// if introducing var s3 = s2.toString() it then takes from 0.003 to 0.004ms total
// so this still seems the fastest on Neko.
Run Code Online (Sandbox Code Playgroud)

使用 6 个字符的字符串(从 500,000 次迭代计算并相应地划分)对 Neko 的测量进行回顾

  • 答:0.030ms
  • B:0.032ms(最差)
  • C:0.006ms(比A快5倍)
  • D:0.002ms(最好,比A快16倍)

250 个字符的字符串测量值(根据 500,000 次迭代计算并相应划分):

  • 答:0.996ms
  • B:1.326ms(仍然最差)
  • C:0.166ms(比A快6倍)
  • D:0.044ms(最好,比A快22倍)

结果表明,随着字符串大小的增加,实现 A 相对于 D 变得越来越慢(意味着其复杂度函数 O(n) 更糟)。

出于这些原因,我推荐实现 D