この周波数検索プログラムをJavascriptで書き直そうとしています。ここではJavaコードは次のとおりです。文字コードを使用して文字列内の単語の頻度を取得するJavaScript
public class frequency {
public static void main(String[] args){
String S = "Temple University";
int[] p = new int[256];
for (char c :S.toCharArray()) {
p[c]++;
System.out.println(c +" shows up "+p[c] + " times");
}
出力:
T shows up 1 times
e shows up 1 times
m shows up 1 times
p shows up 1 times
l shows up 1 times
e shows up 2 times
shows up 1 times
U shows up 1 times
n shows up 1 times
i shows up 1 times
v shows up 1 times
e shows up 3 times
r shows up 1 times
s shows up 1 times
i shows up 2 times
t shows up 1 times
y shows up 1 times
しかし、私のJavaScriptの実装は全く動作しません:
function frequency(){
s = "Temple University";
str = s.split('');
p = [];
p.length = 256;
console.log("start");
for(c in str){
p[c]++;
console.log("inside" + c);
console.log(String.fromCharCode(c) + " shows up " + p[c] + "times");
}
}
それは私が理解しようとしてきた後半ですこのJavaScriptコードが動作しない理由を説明してください。この投稿が未審査であればごめんなさい。
私はあなたの答えが与える洞察が好きですが、私はあなたのコードを実行するとすべてが1の頻度で戻ってくるのですか?また、この場合、配列上でオブジェクトを使用する必要がある理由について詳しく説明することもできます。なぜオブジェクトは一意の値を数えるのに適しているのですか?これを実行するとパフォーマンス上のメリットはありますか? – coderrick
オブジェクトを使用する主な理由の1つは、配列が一般的にコレクションとして使用され、 'push'と' unshift'で追加され、 'for'ループまたはforEach'関数で反復処理されることです。したがって、配列は値のグループとして考えられ、それぞれが連続したインデックスを持ちます。あなたがそれをやっているやり方では、インデックスは必ずしも連続しているわけではないので、配列に対して意味のある繰り返しをすることは不可能です。パフォーマンスは実際問題ではありません。 – furkle
@ cododerまた、コードに小さな誤字がありました。今すぐ動作するはずです。 – furkle