前提・実現したいこと
GASで二分探索をやりたいのですが、テストしてみると一部の結果が正しく出ない
問題が発生しております。
[C#][VB] 二分探索(バイナリサーチ)の実装
を参考にGASで動く二分探索プログラムは作成でき、
基本的な動作は問題ないのですが、全ての結果が正しくはない状態です。
また、基本的にスプレッドシートを使ったデータベース化を前提としていて、
現段階での対象は、150000行 200万セル程度の規模となります。
発生している問題・エラーメッセージ
該当のソースコード
GAS
1//arrayは必ず二次配列で、検索対象は必ず1列目(arr[][0])とする。 2function binarySearch(array,target) 3{ 4 var min = 0; 5 var max = array.length - 1; 6 var switchI = -1; 7 8 while (min <= max) 9 { 10 var mid = Math.floor(min + (max - min) / 2); 11 var num = array[mid][0] 12 if (num == target) 13 { 14 switchI = 0 //一致 15 }else 16 if (num < target) 17 { 18 switchI = 1 //大きい 19 }else 20 { 21 switchI = -1 //小さい 22 } 23 24 switch (switchI) 25 { 26 case 1: // 大きい 27 min = mid + 1; 28 break; 29 case -1: // 小さい 30 max = mid - 1; 31 break; 32 case 0: //一致 33 return mid 34 } 35 } 36 return -1 37} 38 39 40function testBS(){ 41var ssOut,arr,arr2,row 42 arr2 = []; 43 ssOut = ss.getSheetByName('test'); 44 arr = ssOut.getRange("A:A").getValues(); 45 46for(var a = 0; a< arr.length;a++){ 47 row = binarySearch(arr,arr[a]) 48 arr2.push([row]) 49 } 50 51 ssOut.getRange(1,2,arr2.length,arr2[0].length).setValues(arr2) 52} 53
試したこと
uuidを10万件作成し、それを対象にしたら、全て問題なく動作結果が返ってきたため、
対象となるターゲットの並び順に不備があるのだと推測しております。
1、2文字目に "「 [ - , @ = {
等の文字が含まれていると、スプレットシートの基本機能である並び替えに不備が生じている可能性が高く、これを正しく並び替えする方法はまだ見つけていません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/31 02:53