我正在尝试将某些字符串 a 乘以某个整数 b ,以便 a * b = a + a + a ...(b次)。我尝试过就像在python中一样:
class Test {
static function main() {
var a = "Text";
var b = 4;
trace(a * b); //Assumed Output: TextTextTextText
}
}
但这提出了:
构建失败Test.hx:6:字符14-15:字符串应为Int
Haxe编程手册或API文档中似乎没有关于乘法字符串的任何信息,所以我想知道我输错了什么或是否应该使用:
class Test {
static function main() {
var a = "Text";
var b = 4;
var c = "";
for (i in 0...b) {
c = c + a;
}
trace(c); // Outputs "TextTextTextText"
}
}
答案 0 :(得分:4)
数字乘法运算符let html = "";
let rgbColor;
let randomColors = (red, green, blue) => {
for (let i = 1; i <= 10; i++) {
red = Math.floor(Math.random() * 256);
green = Math.floor(Math.random() * 256);
blue = Math.floor(Math.random() * 256);
rgbColor = `rgb(${red},${green},${blue})`;
html += `<div style="background-color:${rgbColor}"></div>`;
}
document.write(html);
}
randomColors()
需要数字类型,如整数。你有一个字符串。如果要将字符串相乘,则必须通过在循环中附加目标字符串来手动完成。
*
运算符不是示例中的数字加号,而是组合字符串的方法。
您可以通过运营商overloading实现您想要的目标:
+
答案 1 :(得分:3)
不是很短,但在某些情况下array comprehension可能会有所帮助:
class Test {
static function main() {
var a = "Text";
var b = 4;
trace( [for (i in 0...b) a].join("") );
//Output: TextTextTextText
}
}
答案 2 :(得分:3)
要在tokiop's answer上构建,您还可以定义times
函数,然后将其用作静态扩展。
using Test.Extensions;
class Test {
static function main() {
trace ("Text".times(4));
}
}
class Extensions {
public static function times (str:String, n:Int) {
return [for (i in 0...n) str].join("");
}
}
答案 3 :(得分:2)
要构建bsinky答案,您还可以将时间函数定义为静态扩展,但避免使用数组:
using Test.Extensions;
class Test {
static function main() {
trace ("Text".times(4));
}
}
class Extensions {
public static function times (str:String, n:Int) {
var v = new StringBuf();
for (i in 0...n) v.add(str);
return v.toString();
}
}
演示:https://try.haxe.org/#e5937
可以针对不同的目标优化StringBuf。例如,在JavaScript目标上,它被编译为就像您只使用字符串https://api.haxe.org/StringBuf.html
一样
答案 4 :(得分:0)
最快的方法(至少在https://try.haxe.org/#195A8的JavaScript目标上)似乎正在使用StringTools._pad
。
public static inline function stringProduct ( s : String, n : Int ) {
if ( n < 0 ) {
throw ( 1 );
}
return StringTools.lpad ( "", s, s.length * n );
}
StringTools.lpad
和StringTools.rpad
似乎无法决定哪个效率更高。看起来rpad可能适用于较大的字符串,lpad可能适用于较小的字符串,但是每次重新运行时它们都会切换一点。 haxe.format.JsonPrinter
使用lpad进行串联,但是我不确定该推荐哪个。