clojure-基本语法-集合(三)

操作集合的通用语句  
1、count: 
count函数返回集合中元素的个数,如果count参数为nil,则返回0 
Java代码   收藏代码
  1. user=> (count nil)  
  2. 0  
  3. user=> (count [])  
  4. 0  
  5. user=> (count [1 2 3])  
  6. 3  
  7. user=> (count '(1 "a"))  
  8. 2  
  9. user=> (count {:one 1 :two 2})  
  10. 2  
  11. user=> (count "string")  
  12. 6  


2、empty: 
返回一个空的集合,集合类型不变,如果empty参数为nil,则返回nil 
Java代码   收藏代码
  1. user=> (empty [1 2 3])  
  2. []  
  3. user=> (empty (list 1 2 3))  
  4. ()  
  5. user=> (empty {:key1 1})  
  6. {}  
  7. user=> (empty nil)  
  8. nil  


3、not-empty: 
如果集合为空,返回nil,其它直接返回参数指向的集合 
Java代码   收藏代码
  1. user=> (not-empty [])  
  2. nil  
  3. user=> (not-empty '(1 2 3))  
  4. (1 2 3)  


4、into: 
into接受两个集合参数,并且将第二个集合参数元素全部插入到第一个集合参数中,再返回。 
Java代码   收藏代码
  1. user=> (into {} [[1 2] [3 4]])  
  2. {1 23 4}  
  3. user=> (into [] {:a 1 :b 2})  
  4. [[:a 1] [:b 2]]  
  5. user=> (into () '(1 2 3))  
  6. (3 2 1)  
  7. user=> (into ["a" "b"] '(1 2 3))  
  8. ["a" "b" 1 2 3]  


5、contains?: 
如果当前给定的集合(第一个参数)存在key(第二个参数),则返回true,否则返回false。特别指出,对于数组、vector以索引标识的集合,如果key在索引返回内,则返回true,否则返回false,对于列表类型,总是返回false。 
Java代码   收藏代码
  1. user=> (contains? {:a 1} :a)  
  2. true  
  3. user=> (contains? {:a nil} :a)  
  4. true  
  5. user=> (contains? {:a 1} :b)  
  6. false  
  7. user=> (contains? [:a :b :c] :b)  
  8. false  
  9. user=> (contains? [:a :b :c] 2)  
  10. true  
  11. user=> (contains? "f" 0)  
  12. true  
  13. user=> (contains? "f" 2)  
  14. false  
  15. user=> (contains? '(1 2 31)  
  16. false  
  17. user=> (contains? #{"a" "b" "v""a")  
  18. true  
  19. user=> (contains? #{"a" "b" "c""z")  
  20. false  


6、distinct?: 
如果传递的参数列表中有值相同的,返回false,否则返回true。 
Java代码   收藏代码
  1. user=> (distinct? 1 2 3)  
  2. true  
  3. user=> (distinct? 1 1 2 3)  
  4. false  
  5. user=> (distinct? "a" "b" "a")  
  6. false  


7、empty?: 
接受一个集合参数,如果该集合没有元素,则返回true,否则返回false。 
Java代码   收藏代码
  1. user=> (empty? ())  
  2. true  
  3. user=> (empty? '(1 2 3))  
  4. false  
  5. user=> (empty? [])  
  6. true  
  7. user=> (empty? {})  
  8. true  
  9. user=> (empty? #{})  
  10. true  


8、every?: 
every?接受两个参数,第一个参数为检查函数,第二个参数为集合。如果该检查函数对集合所有元素都通过,则返回true,否则返回false。 
Java代码   收藏代码
  1. user=> (every? even? '(2 4 6))  
  2. true  
  3. user=> (every? odd? '(1 3 9))  
  4. true  
  5. user=> (every? true? '())  
  6. true  
  7. user=> (every? false? '())  
  8. true  


9、not-every?: 
not-every?与every作用相反。参照every介绍。 
Java代码   收藏代码
  1. user=> (not-every? odd? '(1 2 3))  
  2. true  
  3. user=> (not-every? odd? '(1 3))  
  4. false  


10、some: 
some与every?作用类似,区别是some要求集合中只要有一个元素检查为true,则返回true。所有检查都不通过,则返回nil。 
Java代码   收藏代码
  1. user=> (some even? '(1 2 3 4))  
  2. true  
  3. user=> (some even? '(1 3 5 7))  
  4. nil  
  5. user=> (some true? [false false false])  
  6. nil  
  7. user=> (some true? [false true false])  
  8. true  


11、not-any?: 
not-any?与some函数作用也相反(定义为comp not some),可参考some描述。 
Java代码   收藏代码
  1. user=> (not-any? odd? '(2 4 6))  
  2. true  
  3. user=> (not-any? odd? '(1 2 3))  
  4. false  


12、sequential?: 
sequential?检查集合是否实现Sequential接口(不是排序,而是顺序存储),是则返回true,否则返回false。 
Java代码   收藏代码
  1. user=> (sequential? '(2 1 3))  
  2. true  
  3. user=> (sequential? {:a 1 :d 2 :b 3})  
  4. false  
  5. user=> (sequential? 1)  
  6. false  


13、associative?: 
associative?检查集合是否实现Associative接口,是则返回true,否则返回false。 
Java代码   收藏代码
  1. user=> (associative? [1 2 3])  
  2. true  
  3. user=> (associative? '(1 2 3))  
  4. false  


14、sorted?: 
sorted?检查集合是否实现Sorted接口,是则返回true,否则返回false。 
Java代码   收藏代码
  1. user=> (sorted? (sorted-set 5 3 1 2 4))  
  2. true  
  3. user=> (sorted? (sorted-map :a 1 :c 3 :b 2))  
  4. true  
  5. user=> (sorted? [1 2 3 4 5])  
  6. false  


15、counted?: 
如果集合参数以常量时间内返回元素总和时,返回true,否则返回false。 
Java代码   收藏代码
  1. user=> (sorted? [1 2 3 4 5])  
  2. false  
  3. user=> (counted? [:a :b :c])  
  4. true  
  5. user=> (counted? '(:a :b :c))  
  6. true  
  7. user=> (counted? {:a 1 :b 2 :c 3})  
  8. true  
  9. user=> (counted? "asdf")  
  10. false  


16、reversible?: 
reversible?检查集合参数是否实现Reversible接口,是则返回true,否则返回false。 
Java代码   收藏代码
  1. user=> (reversible? [])  
  2. true  
  3. user=> (reversible? '())  
  4. false  
  5. user=> (reversible? #{})  
  6. false  


类型检查  
1、coll?: 
如果给定的参数实现IPersistentCollection接口(集合都会实现该接口),则返回true,否则返回false。 
Java代码   收藏代码
  1. user=> (coll? {})   
  2. true   
  3. user=> (coll? #{})   
  4. true   
  5. user=> (coll? [])   
  6. true   
  7. user=> (coll? ())   
  8. true   
  9. user=> (coll? 4)   
  10. false  
  11. user=> (coll? "fred")   
  12. false  
  13. user=> (coll? true)   
  14. false  
  15. user=> (coll? nil)   
  16. false  


2、seq?: 
如果给定的参数实现ISeq接口(序列实现该接口,序列内容在下篇讲解),则返回true,否则返回false 
Java代码   收藏代码
  1. user> (seq? 1)   
  2. false   
  3. user> (seq? [1])   
  4. false   
  5. user> (seq? (seq [1]))   
  6. true   


3、vector?: 
如果给定的参数实现IPersistentVector接口(向量Vector实现该接口),则返回true,否则返回false 
Java代码   收藏代码
  1. user=> (vector? [1 2 3])   
  2. true   
  3. user=> (vector? '(1 2 3))   
  4. false   
  5. user=> (vector? (vec '(1 2 3)))   
  6. true   


4、list?: 
如果给定的参数实现IPersistentList接口(列表List实现该接口),则返回true,否则返回false 
Java代码   收藏代码
  1. user=> (list? '(1 2 3))   
  2. true   
  3. user=> (list? (list 1 2))   
  4. true   
  5. user=> (list? 0)   
  6. false   
  7. user=> (list? {})   
  8. false   
  9. user=> (list? [])   
  10. false    


5、map?: 
如果给定的参数实现IPersistentMap接口(映射Map实现该接口),则返回true,否则返回false 
Java代码   收藏代码
  1. user=> (map? {:a 1 :b 2 :c 3})   
  2. true   
  3. user=> (map? '(1 2 3))   
  4. false    


6、set?: 
如果给定的参数实现IPersistentSet接口(set集合实现该接口),则返回true,否则返回false 
Java代码   收藏代码
  1. user> (set? #{1 2 3})   
  2. true   
  3. user> (set? [1 2 3])   
  4. false   
  5. user> (set? {:a 1 :b 2})   
  6. false   

实际上本篇介绍的各种检查语句,都是检查底层实现类所实现的接口(具有对应接口的功能),比如说列表List的实现类定义为: 
Java代码   收藏代码
  1. public class PersistentList extends ASeq  
  2.   implements IPersistentList, IReduce, List, Counted  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值