私は、同じ名前だが行ごとに項目が異なる多数の行を持つ巨大なテーブルを持っています。私が次を実行する場合
rows = table.rows.whose(searchFilter)()
そして、私がrows.lengthをチェックすると、検索のための正しい番号が得られます。ただし、配列は最初の行のみが複数回繰り返されます。私はすべての行が同じ名前を持ち、返されるオブジェクト指定子がbyName()に基づいているからだと思います。私はJavaScriptで各行を調べることでフィルタリングできますが、実際にはかなり時間がかかります。誰がすばやく右のものをフィルタリングしているようだが、間違った行を返す。このための回避策はありますか?
ありがとうございます!AppleScript JXA同じ名前で異なる項目の行を含むテーブルをフィルタリングする
答えて
あなたは何のスクリプトを書いているのかは分かりませんが(それは助けになります)、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を使うことに固執する理由があります。アップルが、最大のユーザー力を発揮する革新的な技術革新(エンドユーザー向けのデスクトップオートメーション)を、まっすぐに流してしまったことや、それが実現したことに気づいていないと非難しています。
- 1. 春の統合 - FileSystemPersistentAcceptOnceFileListFilter同じ名前でタイムスタンプの異なるファイルをフィルタリングする
- 2. html形式を区別する同じ名前のSELECT項目
- 3. xpath特定の要素を含む項目をフィルタリングする
- 4. 同じ行に複数の項目がある項目を読む
- 5. 異なる名前の同じ名前のディレクトリの名前を変更する
- 6. Entity Framework 2つのテーブル同じデザインの異なる名前
- 7. Subsonic:同じ列名の異なるテーブル
- 8. 列に同じ正確な項目を持つ異なる名前のペアを返します。
- 9. Android Espresso - 同じ項目を含む単一のリスト(AmbiguousViewMatcherException)
- 10. 同じ名前で異なるパスのクッキーを削除する
- 11. Linq2Sql:同じ名前と異なるスキーマ名を持つテーブルを扱う方法
- 12. 同じタイプの異なるオブジェクトの異なる名前
- 13. 同じ名前で異なるテーブルにある3つのColomnsで同じ値を見つける
- 14. JXA Applescript Sliderの値を取得する
- 15. リストビュー項目をsqliteテーブルの名前で削除する方法
- 16. 複数のDB Django、同じ名前と異なるフィールド名のテーブル
- 17. 同じ名前でパッケージ名の異なる新しいアプリ
- 18. 同じ名前の異なるファイルシステムを区別する
- 19. 同じ名前と異なる値のデータフレームを集約する
- 20. 同じ名前の異なるフォントを使用する方法
- 21. 項目と、この[] - 同じ名前のメンバーが既に
- 22. 異なるレベルの同じ名前を含むネストされたパッケージを含むUMLパッケージダイアグラムを生成するにはどうすればよいですか?
- 23. 同じ名前の列を含むデータフレームのリスト
- 24. 子ノードの名前が同じフィルタ項目
- 25. 名前を編集するとき、AngularJSのドロップダウンメニューに同じ名前の項目を表示します
- 26. 異なるテーブルで同じSQLスクリプトを実行する
- 27. Jquery同じ名前の複数のxmlノードをフィルタリングする
- 28. 同じ名前の兄弟である要素を含むOpenXMLの解析
- 29. 同じ名前の2つの異なるファイルタイプを同じ名前の新しいフォルダに移動します
- 30. 同じ名前で異なるパラメータを持つC++メソッド
ありがとうございました!これは非常に有望です!またSwiftAEを指してくれてありがとう。それは便利になります! – chibop
SwiftAEはアルファベットであり、完全に機能していないので、今は使用しないでください(Swiftのタイプシステムに問題がありますので、リストとレコードの結果をアンパックするとまだ動作しません。私は参考にしてそのドキュメントを指していますが、これは素晴らしいことではありませんが、アップルのサイトの情報よりも無限に多くの情報を提供しているからです。 – foo
ソリューションは完全に同様に動作します!それは時間のトンを節約!ありがとう! – chibop