SORU
14 Temmuz 2010, ÇARŞAMBA


Bir liste olup olmadığını Test Clojure belirli bir değer içerir

Bir liste Clojure verilen bir değer içerip içermediğini test etmek için en iyi yolu nedir?

Özellikle, içeren davranışı? şu anda bana kafa karıştırıcı

(contains? '(100 101 102) 101) => false

Belli ki geçiş için basit bir fonksiyon listesi yazmak ve eşitlik için test olabilir, ama kesinlikle bunu yapmak için standart bir yolu olmalı?

CEVAP
14 Temmuz 2010, ÇARŞAMBA


Ah, contains?... ilk beş sözde bir yeniden SSS: Clojure.

Yokdeğilbir koleksiyonu bir değer içerip içermediğini kontrol edin; bu bir toplama bir anahtarı içerip içermediğini bir öğe get ile alınamadı ya da diğer bir deyişle, olup olmadığını denetler. Bu mantıklı için ayarlar (hangi olabilir düşünce olarak yapmak arasında bir ayrım anahtarlar ve değerler), haritalar ((contains? {:foo 1} :foo) true) ve vektörler (ama unutmayın (contains? [:foo :bar] 0) true, çünkü anahtarları burada endeks ve vektöründe soru mu "içeren" Endeksi 0!).

Karışıklık eklemek için, sense contains?, arama yapmaz durumlarda sadece dönüş false; (contains? :foo 1) Bu durumda olurve ayrıca(contains? '(100 101 102) 101).

Yapmaya çalıştığın şeyi yapmak için doğru bir yolu aşağıdaki gibidir:

; most of the time this works
(some #{101} '(100 101 102))

Ararken bir sürü öğeleri kullanabilirsiniz daha büyük bir set; ararken false / nilkullanabilirsiniz false? / nil? çünkü ... (#{x} x) döner x böylece (#{nil} nil) nil; ararken birden çok öğeleri bazıları da neden olabilir false nil kullanabilirsiniz

(some (zipmap [...the items...] (repeat true)) the-collection)

(Öğeleri koleksiyonu her türlü zipmap geçirilebilir unutmayın.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • ibebrent

    ibebrent

    23 Temmuz 2007
  • magnum33563

    magnum33563

    8 NİSAN 2011