2016-11-14 13 views
0

スプレッドシートで検索する必要があります。最初の列は@部分のないメールのリストです。例えばGoogle Apps Scriptのバイナリ検索アルゴリズム

aadb.asdf 
asdfsd.asdf 
asdfsad.asdfsdf 
asdfsdf.asdfsdf 
以下

は、バイナリサーチのために私のコードです:

function testSubmit() { 


    var email = "aadb.asdf"; 
    var s = SpreadsheetApp.openById("spreadsheetID"); 
    var sheet = s.getSheets()[0]; 
    var emailColumn = sheet.getRange(1,1, sheet.getLastRow()).getValues(); 

    var l1 = 0; 
    var h1 = Number(sheet.getLastRow()) - 1; 


    while(h1 >= l1) { 

    var middle = parseInt((l1 + h1)/2); 
    var item = emailColumn[middle][0].valueOf(); 
    Logger.log("Binary -> middle : " + middle + " data : " + emailColumn[middle][0]); 

    if(item == email) { 

    } 

    if(item.charAt(0) < email.charAt(0)) { 
     l1 = middle + 1; 
    } 

    if(item.charAt(0) > email.charAt(0)) { 
     h1 = middle - 1; 
    } 
    } 

} 

しかし、私のスクリプトが動けなくなると、メッセージは以下のスクリーンショットで提供します。

enter image description here

私は線形検索を実行したときしかし、それが正常に動作します。スクリプトに問題はありますか?あなたのwhile文で

for (var row in emailColumn) { 
    for (var col in emailColumn[row]) { 
    if(email == emailColumn[row][col]) { 
    Logger.log("row : " + row + " col : " + col + " data : " + emailColumn[row][col]); 
    } 
    } 
    } 
+1

表示されているメッセージはエラーメッセージではありません。どれくらい待ちますか?あなたはスクリプト実行記録を見直しますか? (https://developers.google.com/apps-script/troubleshootingを参照)。 –

+1

添付されている画像はエラーメッセージではありません。 @ルベンは正しいです。それ以外のメッセージはありますか?期待した結果は何ですか?今のところ、[documentation](https://developers.google.com/apps-script/troubleshooting#debugging)を読んでみてください。それはデバッグを含むすべてを議論した。 –

+0

私はそれが誤りであるとは言いませんでしたが、バイナリ検索は線形よりも時間がかかりますので、起こってはいけません。しかし、私のスクリプトでは、バイナリがいくつかの点で立ち往生しているように見える間に、線形検索は迅速です。私はエラーのために私のスクリプトを再確認しますが、私は何も表示されません –

答えて

0

ルックは...変更されなくなっている所定の瞬間にそのH1およびL1かもしれないので、それがループ内で立ち往生。

関連する問題