Clojureは、指定されたシーケンス内のサブシーケンスの位置を見つけるための組み込みの方法を提供しますか?Clojureサブシーケンスのシーケンスの位置
5
A
答えて
7
Clojureは簡単に組み込みの方法を提供しますJava Interop。
(java.util.Collections/indexOfSubList '(a b c 5 6 :foo g h) '(5 6 :foo))
;=> 3
3
シーケンスは抽象であり、concretionではありません。シーケンス抽象化で使用できる特定のコンセプトには、サブシーケンス(文字列やJavaコレクションなど)の位置を見つける方法がありますが、一般的なシーケンスはありません。基本的なconcretionはインデックスを持つ必要がないためです。
しかし、できることは、要素IDとインデックス関数のjuxtを作成することです。 map-indexedをご覧ください。
シーケンス内の(すべての)サブシーケンスの位置を遅らせるための素朴な実装です。最初に使用するか、1つで1つだけを検索してください:
(defn find-pos
[sq sub]
(->>
(partition (count sub) 1 sq)
(map-indexed vector)
(filter #(= (second %) sub))
(map first)))
=> (find-pos [:a :b \c 5 6 :foo \g :h]
[\c 5 6 :foo])
(2)
=> (find-pos "the quick brown fox"
(seq "quick"))
(4)
一般に、インデックスベースのアルゴリズムは機能的な言語ではないことに注意してください。最終結果にインデックスが必要な理由がない限り、インデックスルックアップの贅沢な使用はコードの匂いとみなされます。
関連する問題
- 1. サブシーケンス部分からのシーケンス?
- 2. Clojure + Swingアブソリュート位置決めの問題
- 3. clojure "look-and say"シーケンス
- 4. シーケンス内のサブシーケンスの可能な最大和を返すアルゴリズム
- 5. 3つのシーケンスの中で最も長い共通サブシーケンス
- 6. Linqを使ってシーケンスのサブシーケンスにフィルタを適用する
- 7. シーケンスから最大長のサブシーケンスを抽出する[PYTHON]
- 8. Clojureのシーケンスにカスタムビヘイビアを追加する
- 9. N個のシーケンスの中で最も長い共通サブシーケンス(diff目的のため)
- 10. clojureでシーケンスを結合するには?
- 11. 配列のサブシーケンス
- 12. Clojureの2つのシーケンスからの値のペアの処理
- 13. clojureの格納と式のシーケンスの使用
- 14. Clojureでは、空のリストは無限のヌルのシーケンスですか?
- 15. Clojureのエッジを表すタプルのシーケンスへのネストされたマップ
- 16. シーケンス 'z'の最初の項目 'y'の位置を数える関数
- 17. シーケンス上のforループ内の項目の位置を見つける
- 18. Clojureのseqとシーケンスの違いは何ですか?
- 19. SpriteNodeの位置とタッチの位置
- 20. テーブルのポップアップの位置y-位置
- 21. CSSアニメーション - 元の位置への位置
- 22. 行内に同じ文字のシーケンスの位置を見つける
- 23. CodeChefのサブシーケンス等価
- 24. 最長のサブシーケンスが
- 25. 絶対位置での位置付け
- 26. 固定位置内の絶対位置
- 27. 絶対位置での位置部門
- 28. Plotlyツールチップの位置がカーソル位置
- 29. Clojureでリスト/シーケンス内の項目を追加する
- 30. Clojureのシーケンスと一致しませんか?
ありがとうございます。これは私が最後に使用するものですが、私は通常、Java Interopを「ビジネス」コードから明示的に呼び出すことを避けようとしています。少し冗長であるとわかります。それにもかかわらずありがとう。 –
これはうまくいくかもしれませんが、コレクションはシーケンスではないことに注意してください。 – NielsK
@NielsK哲学的な概念は別として、 'java.util.List'が' seq'のスーパークラスであり、javaメソッドが 'java.util.List'のペアであると思います。このように、遅延のあるシーケンス(これを無限に評価しないように注意してください) '(java.util.Collections/indexOfSubList(range 10)(range 3 7)); => 3'、vectors、sorted-地図など –