2016-09-03 3 views
0

私は、同じ名前だが行ごとに項目が異なる多数の行を持つ巨大なテーブルを持っています。私が次を実行する場合
rows = table.rows.whose(searchFilter)()
そして、私がrows.lengthをチェックすると、検索のための正しい番号が得られます。ただし、配列は最初の行のみが複数回繰り返されます。私はすべての行が同じ名前を持ち、返されるオブジェクト指定子がbyName()に基づいているからだと思います。私はJavaScriptで各行を調べることでフィルタリングできますが、実際にはかなり時間がかかります。誰がすばやく右のものをフィルタリングしているようだが、間違った行を返す。このための回避策はありますか?
ありがとうございます!AppleScript JXA同じ名前で異なる項目の行を含むテーブルをフィルタリングする

答えて

0

あなたは何のスクリプトを書いているのかは分かりませんが(それは助けになります)、JXAの問題ではなく(一度だけ)、アプリケーション1のように聞こえます。 -index、by-name、またはby-id指定子を使用します。 by-id指定子だけが安定しており、ユニークであることが保証されています(唯一の欠点は、他のフォームと異なり、ID値は人間が読めるものではありません)が、インデックスや名前形式で多くのアプリケーションを返します。前者は要素が動いたときに問題になり、後者は要素名が一意でない場合に発生します。

あなたの唯一の現実的な選択肢は、一致する行の値を取得し、行の値のセットが要件に一致したときに独自のby-index指定子を作成することです。このようにして、の行番号ごとにいくつかのイベントを送信するのではなく、複数のAppleイベント(つまり、1つのAEから1つの列からすべての値を取得する)を送信するだけです。 AEの処理は高価な操作なので、同じデータを取得するために使用するクエリーの数を減らすことができれば、取得するデータを一度に照合しても、たくさんの単純なデータを使用するよりもずっと安価に機能しますあなたが実際に望むフォームに変換します。

(それはポイントを説明する場合に役立ちますHere's another example。)

tell app "Whatever" 
    set allFoos to get value of cell "foo" of every row of theTable 
    set allBars to get value of cell "bar" of every row of theTable 
    set foundRefs to {} 
    repeat with i from 1 to length of allNames 
     if item i of allFoos is myFoo and item i of allBars is myBar then 
      set end of foundRefs to row i of theTable 
     end if 
    end repeat 
end tell 
-- foundRefs list now contains by-index refs to the matched rows 

JXAで同等のコードを記述する方法を考え出す

はに十分な愚かな誰にも残されている:AppleScriptでは、[1]、あなたのような何かを書くかもしれませんその壊れた尻のPOSを最初に使用してください。 [2]

-

[1]皮肉なことにAppleScriptのリストは、リストは、実際にされているようなベクトルの配列はそうO(1)ことが、実際にそれらを取得する必要があり、原因JSのArrayタイプのような安っぽいの内部実装(にO(n)検索のパフォーマンスを持っていますそのように振る舞うには、余計なASコードでkludgingが必要になります。だからAppleScriptのコードは異常に悪いことに実行されますが、ここでの目的は、制作スクリプトではなく一般的なアルゴリズムを実証することだけですので、kludgyのクラップスでそれを難読化するつもりはありません[2]。

[2]私はASとJXAの家の両方にポックスを呼び、自分でappscriptを使うことに固執する理由があります。アップルが、最大のユーザー力を発揮する革新的な技術革新(エンドユーザー向けのデスクトップオートメーション)を、まっすぐに流してしまったことや、それが実現したことに気づいていないと非難しています。

+0

ありがとうございました!これは非常に有望です!またSwiftAEを指してくれてありがとう。それは便利になります! – chibop

+0

SwiftAEはアルファベットであり、完全に機能していないので、今は使用しないでください(Swiftのタイプシステムに問題がありますので、リストとレコードの結果をアンパックするとまだ動作しません。私は参考にしてそのドキュメントを指していますが、これは素晴らしいことではありませんが、アップルのサイトの情報よりも無限に多くの情報を提供しているからです。 – foo

+0

ソリューションは完全に同様に動作します!それは時間のトンを節約!ありがとう! – chibop

関連する問題