検索

元のアドレス: http://www.davidflanagan.com/2009/08/string-multipli.html
原著者: David Flanagan
Ruby で、「*」演算子は、左側のパラメータとして文字列を使用し、右側のパラメータとして数値を使用して、文字列の繰り返しを実装します。たとえば、「Ruby」 * 2 の値は「RubyRuby」です。これは限られた場所でしか役に立ちません (たとえば、ハイフンなどの ASCII 文字のテーブルの生成など) が、非常に簡潔です。また、文字列を n 回連結するループを作成するよりも優れています (非常に非効率的と思われます)。

JavaScript で文字列の乗算を行うための賢いトリックを発見しました:


String.prototype.times = function(n) {
return Array.prototype.join.call({length:n 1}, this); ;
"js".times(5) // => "jsjsjsjsjs"


このメソッドは、要素がすべて「未定義」である配列を呼び出します。行動。ただし、実際には、n 1 個の「未定義」要素を含む配列は作成されません。これは、Array オブジェクトのプロトタイプ関数 join() に依存して、長さプロパティを含む匿名オブジェクトを使用します。 「Object」は配列ではないため、join() を直接呼び出すことができないため、プロトタイプの call() を通じて実装する必要があります。同じ効果を持つ単純なバージョンを以下に示します。


コードをコピーします コードは次のとおりです:
String.prototype.times = function(n) { return (new Array(n 1)).join(this);};

配列のコンストラクターを 1 つで呼び出すときパラメータは配列の長さを設定するだけで、実際に配列の要素を作成するわけではありません。

私は Firefox でのみテストしており、通常のループよりも効率的であると推定していますが、ベンチマークは行っていません。

著者について
David Flanagan は、Java の執筆に熱中しているコンピューター プログラマーです。Java 関連の本の執筆にほとんどの時間を費やしています。 David は、MIT でコンピューター サイエンスとエンジニアリングの学位を取得しました。彼は米国の太平洋岸北西部、シアトルとバンクーバーの間に住んでいます。オライリーのベストセラー書籍には、『Java in a Nutshell』、『Java Foundation Classes in a Nutshell』、『Java Enterprise in a Nutshell』、『JavaScript: The Definitive Guide』、『JavaScript Pocket Reference』、および『The Ruby Programming Language』などがあります。

私のコメント
効率を重視する場合は、ループの反復をわずかに最適化するとより効率的になる可能性があります。たとえば、次の再帰呼び出しのアルゴリズムの複雑さは O(log2n) です。 Google Chrome でのテスト結果は、David の方法よりも実行速度が速いということですが、彼の方法が非常にエレガントであることは認めざるを得ません。

コードをコピー コードは次のとおりです。
String.prototype.times = function(n ) {
if ( n == 1 ) {
これを返します;
}
varmidRes = this.times(Math.floor(n/2));
if ( n % 2 ) {
midRes = this;
return
}


追記
David は私の提案を採用しました。彼は私たちのために非再帰バージョンを書いてくれました。彼のブログの原文をご覧ください: http://www.davidflanagan.com/2009/08/good-algorithms.html
連絡先情報
私のメールアドレス、お気軽にお問い合わせください (redraiment@gmail.com) )
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
php怎么将16进制字符串转为数字php怎么将16进制字符串转为数字Oct 26, 2021 pm 06:36 PM

php将16进制字符串转为数字的方法:1、使用hexdec()函数,语法“hexdec(十六进制字符串)”;2、使用base_convert()函数,语法“bindec(十六进制字符串, 16, 10)”。

php怎么将字符串转换成小数php怎么将字符串转换成小数Mar 22, 2023 pm 03:22 PM

PHP 是一门功能强大的编程语言,广泛应用于 Web 开发领域。其中一个非常常见的情况是需要将字符串转换为小数。这在进行数据处理的时候非常有用。在本文中,我们将介绍如何在 PHP 中将字符串转换为小数。

golang怎么检测变量是否为字符串golang怎么检测变量是否为字符串Jan 06, 2023 pm 12:41 PM

检测变量是否为字符串的方法:1、利用​“%T”格式化标识,语法“fmt.Printf("variable count=%v is of type %T \n", count, count)”;2、利用reflect.TypeOf(),语法“reflect.TypeOf(变量)”;3、利用reflect.ValueOf().Kind()检测;4、使用类型断言,可以对类型进行分组。

php 字符串长度不一致怎么办php 字符串长度不一致怎么办Feb 07, 2023 am 09:58 AM

php字符串长度不一致的解决办法:1、通过mb_detect_encoding()函数查看字符串的编码方式;2、通过mb_strlen函数查看具体字符长度;3、使用正则表达式“preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str1, $matches);”剔除非中文字符即可。

php怎么将字符串转为布尔类型php怎么将字符串转为布尔类型Jul 01, 2021 pm 06:36 PM

转换方法:1、在转换变量前加上用括号括起来的目标类型“(bool)”或“(boolean)”;2、用boolval()函数,语法“boolval(字符串)”;3、用settype()函数,语法“settype(变量,"boolean")”。

go语言怎么删除字符串中的空格go语言怎么删除字符串中的空格Jan 17, 2023 pm 02:31 PM

删除方法:1、使用TrimSpace()函数去除字符串左右两边的空格,语法“strings.TrimSpace(str)”;2、使用Trim()函数去除字符串左右两边的空格,语法“strings.Trim(str, " ")”;3、使用Replace()函数去除字符串的全部空格,语法“strings.Replace(str, " ", "", -1)”。

php字符串函数学习:怎么去掉前面的字符php字符串函数学习:怎么去掉前面的字符Mar 20, 2023 pm 02:33 PM

在开发PHP应用程序时,有时我们需要去掉字符串前面的某些特定字符或者字符串。在这种情况下,我们需要使用一些PHP函数来实现这一目标。本文将介绍一些PHP函数,帮助您轻松地去掉字符串前面的字符或字符串。

php字符串部分乱码怎么办php字符串部分乱码怎么办Jan 20, 2023 am 10:18 AM

php字符串部分乱码的解决办法:1、使用“mb_substr(strip_tags($str),0,-1,'UTF-8');”截取字符串;2、使用“iconv("UTF-8","GB2312//IGNORE",$data)”转换字符集即可。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、