[解決済み] Clojureでリストが特定の値を含むかどうかをテストする
質問
Clojureでリストが与えられた値を含むかどうかをテストする最良の方法は何ですか?
特に
contains?
は、現在私を混乱させています。
(contains? '(100 101 102) 101) => false
もちろん、リストを走査して等質性をテストする簡単な関数を書くこともできますが、これを行うための標準的な方法があるはずです。
どのように解決するのですか?
あ。
contains?
Clojureに関するFAQのトップ5の1つと言われています。
それは
ではない
コレクションが値を含んでいるかどうかをチェックします。
get
言い換えれば、コレクションにキーが含まれているかどうかということである。これは、集合(キーと値の区別がないと考えることができる)、マップ(したがって
(contains? {:foo 1} :foo)
は
true
) とベクトル (ただし
(contains? [:foo :bar] 0)
は
true
というのも、このキーはインデックスであり、問題のベクトルはインデックスを "含むからです。
0
!).
<ストライク
さらに混乱を招いたのは、このように
contains?
を返すだけです。
false
で起こることです。
(contains? :foo 1)
また
(contains? '(100 101 102) 101)
.
更新してください。
Clojure ≥ 1.5 では
contains?
は、意図した "key membership" テストをサポートしない型のオブジェクトを渡したときにスローします。
あなたがやろうとしていることを正しく行うには、次のようにします。
; most of the time this works
(some #{101} '(100 101 102))
たくさんの項目の中から一つを検索する場合は、より大きなセットを使用することができます。
false
/
nil
を使用することができます。
false?
/
nil?
-- なぜなら
(#{x} x)
リターン
x
したがって
(#{nil} nil)
は
nil
を検索する場合。
false
または
nil
を使用することができます。
(some (zipmap [...the items...] (repeat true)) the-collection)
(ただし、項目は
zipmap
を任意のタイプのコレクションで使用することができます)。
関連
-
[解決済み】最小スパニングツリー。カットプロパティとは何ですか?
-
[解決済み] 補助データ構造とは何ですか?
-
[解決済み] なぜバイナリサーチツリーでHashtableを実装するのか?
-
[解決済み] フュージョンツリーを理解する?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み】2分木と2分探索木の違いについて
-
[解決済み] lenses, fclabels, data-accessor - 構造体アクセスと突然変異のためのどのライブラリが良いか
-
[解決済み] Clojureでリストが特定の値を含むかどうかをテストする
-
[解決済み] メモリ上でhexile/hexグリッドを表現するにはどうしたらよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン