操作集合的通用语句
1、count:
count函数返回集合中元素的个数,如果count参数为nil,则返回0
user=> (count nil)
0
user=> (count [])
0
user=> (count [1 2 3])
3
user=> (count '(1 "a"))
2
user=> (count {:one 1 :two 2})
2
user=> (count "string")
6
2、empty:
返回一个空的集合,集合类型不变,如果empty参数为nil,则返回nil
user=> (empty [1 2 3])
[]
user=> (empty (list 1 2 3))
()
user=> (empty {:key1 1})
{}
user=> (empty nil)
nil
3、not-empty:
如果集合为空,返回nil,其它直接返回参数指向的集合
user=> (not-empty [])
nil
user=> (not-empty '(1 2 3))
(1 2 3)
4、into:
into接受两个集合参数,并且将第二个集合参数元素全部插入到第一个集合参数中,再返回。
user=> (into {} [[1 2] [3 4]])
{1 2, 3 4}
user=> (into [] {:a 1 :b 2})
[[:a 1] [:b 2]]
user=> (into () '(1 2 3))
(3 2 1)
user=> (into ["a" "b"] '(1 2 3))
["a" "b" 1 2 3]
5、contains?:
如果当前给定的集合(第一个参数)存在key(第二个参数),则返回true,否则返回false。特别指出,对于数组、vector以索引标识的集合,如果key在索引返回内,则返回true,否则返回false,对于列表类型,总是返回false。
user=> (contains? {:a 1} :a)
true
user=> (contains? {:a nil} :a)
true
user=> (contains? {:a 1} :b)
false
user=> (contains? [:a :b :c] :b)
false
user=> (contains? [:a :b :c] 2)
true
user=> (contains? "f" 0)
true
user=> (contains? "f" 2)
false
user=> (contains? '(1 2 3) 1)
false
user=> (contains? #{"a" "b" "v"} "a")
true
user=> (contains? #{"a" "b" "c"} "z")
false
6、distinct?:
如果传递的参数列表中有值相同的,返回false,否则返回true。
user=> (distinct? 1 2 3)
true
user=> (distinct? 1 1 2 3)
false
user=> (distinct? "a" "b" "a")
false
7、empty?:
接受一个集合参数,如果该集合没有元素,则返回true,否则返回false。
user=> (empty? ())
true
user=> (empty? '(1 2 3))
false
user=> (empty? [])
true
user=> (empty? {})
true
user=> (empty? #{})
true
8、every?:
every?接受两个参数,第一个参数为检查函数,第二个参数为集合。如果该检查函数对集合所有元素都通过,则返回true,否则返回false。
user=> (every? even? '(2 4 6))
true
user=> (every? odd? '(1 3 9))
true
user=> (every? true? '())
true
user=> (every? false? '())
true
9、not-every?:
not-every?与every作用相反。参照every介绍。
user=> (not-every? odd? '(1 2 3))
true
user=> (not-every? odd? '(1 3))
false
10、some:
some与every?作用类似,区别是some要求集合中只要有一个元素检查为true,则返回true。所有检查都不通过,则返回nil。
user=> (some even? '(1 2 3 4))
true
user=> (some even? '(1 3 5 7))
nil
user=> (some true? [false false false])
nil
user=> (some true? [false true false])
true
11、not-any?:
not-any?与some函数作用也相反(定义为comp not some),可参考some描述。
user=> (not-any? odd? '(2 4 6))
true
user=> (not-any? odd? '(1 2 3))
false
12、sequential?:
sequential?检查集合是否实现Sequential接口(不是排序,而是顺序存储),是则返回true,否则返回false。
user=> (sequential? '(2 1 3))
true
user=> (sequential? {:a 1 :d 2 :b 3})
false
user=> (sequential? 1)
false
13、associative?:
associative?检查集合是否实现Associative接口,是则返回true,否则返回false。
user=> (associative? [1 2 3])
true
user=> (associative? '(1 2 3))
false
14、sorted?:
sorted?检查集合是否实现Sorted接口,是则返回true,否则返回false。
user=> (sorted? (sorted-set 5 3 1 2 4))
true
user=> (sorted? (sorted-map :a 1 :c 3 :b 2))
true
user=> (sorted? [1 2 3 4 5])
false
15、counted?:
如果集合参数以常量时间内返回元素总和时,返回true,否则返回false。
user=> (sorted? [1 2 3 4 5])
false
user=> (counted? [:a :b :c])
true
user=> (counted? '(:a :b :c))
true
user=> (counted? {:a 1 :b 2 :c 3})
true
user=> (counted? "asdf")
false
16、reversible?:
reversible?检查集合参数是否实现Reversible接口,是则返回true,否则返回false。
user=> (reversible? [])
true
user=> (reversible? '())
false
user=> (reversible? #{})
false
类型检查
1、coll?:
如果给定的参数实现IPersistentCollection接口(集合都会实现该接口),则返回true,否则返回false。
user=> (coll? {})
true
user=> (coll? #{})
true
user=> (coll? [])
true
user=> (coll? ())
true
user=> (coll? 4)
false
user=> (coll? "fred")
false
user=> (coll? true)
false
user=> (coll? nil)
false
2、seq?:
如果给定的参数实现ISeq接口(序列实现该接口,序列内容在下篇讲解),则返回true,否则返回false
user> (seq? 1)
false
user> (seq? [1])
false
user> (seq? (seq [1]))
true
3、vector?:
如果给定的参数实现IPersistentVector接口(向量Vector实现该接口),则返回true,否则返回false
user=> (vector? [1 2 3])
true
user=> (vector? '(1 2 3))
false
user=> (vector? (vec '(1 2 3)))
true
4、list?:
如果给定的参数实现IPersistentList接口(列表List实现该接口),则返回true,否则返回false
user=> (list? '(1 2 3))
true
user=> (list? (list 1 2))
true
user=> (list? 0)
false
user=> (list? {})
false
user=> (list? [])
false
5、map?:
如果给定的参数实现IPersistentMap接口(映射Map实现该接口),则返回true,否则返回false
user=> (map? {:a 1 :b 2 :c 3})
true
user=> (map? '(1 2 3))
false
6、set?:
如果给定的参数实现IPersistentSet接口(set集合实现该接口),则返回true,否则返回false
user> (set? #{1 2 3})
true
user> (set? [1 2 3])
false
user> (set? {:a 1 :b 2})
false
实际上本篇介绍的各种检查语句,都是检查底层实现类所实现的接口(具有对应接口的功能),比如说列表List的实现类定义为:
public class PersistentList extends ASeq
implements IPersistentList, IReduce, List, Counted
分享到:
相关推荐
了解Clojure的基础语法,如S-expressions(符号表达式)、宏、动态类型以及如何定义和调用函数,是深入研究源码的前提。 2. **数据结构**:Clojure提供了多种内置数据结构,如列表、向量、映射、集合和范围。理解...
《Programming Clojure 第三版》是一本深入探讨Clojure编程语言的专业书籍,旨在帮助开发者全面理解和掌握这门基于Lisp的现代函数式编程语言。Clojure是由Rich Hickey设计的,它运行在Java虚拟机(JVM)上,同时也...
这个“clojure-basics-源码.rar”压缩包很可能是包含了一些基本Clojure编程概念的示例代码或者教程。虽然没有具体的标签提供额外的信息,但我们可以从文件名推测其内容可能涵盖了Clojure的基础知识。 Clojure的基本...
它采用Clojure语法,使得配置文件本身可读性强,易于理解和维护。例如,你可以这样声明一个依赖: ```clojure {:deps {org.clojure/clojure {:mvn/version "1.10.3"}} :aliases {"dev" [:require [clojure.java....
Clojure,作为一种功能强大的 Lisp方言,凭借其简洁的语法和强大的数据处理能力,成为了处理CSV数据的理想工具。本文将以开源项目“clojure-skattelisten-csv-parser”为例,深入探讨如何使用Clojure高效地解析CSV...
1. **教程**:这些教程会介绍Clojure的基本语法、数据结构、控制流、函数式编程概念等,帮助初学者快速入门。 2. **示例代码**:通过实际的代码示例,你可以看到Clojure如何解决特定问题,提升对语言特性的理解。 3....
通过参与这个“clojure-shopshop”研讨会,学习者将全面了解Clojure的语法和设计理念,如使用REPL(Read-Eval-Print Loop)进行动态测试,理解Clojure的数据结构(如向量、列表、映射和集合),掌握函数式编程的核心...
Clojure是一种动态类型的语言,它的设计目标是提供一个简洁、强大且具有表达力的语法,适合处理复杂的数据结构。Clojure的运行环境是Java虚拟机(JVM),这使得它能够无缝地利用Java库和资源,同时保持高效的性能。...
此外,理解Clojure的基本语法和数据结构,如列表、映射、向量和集合,以及函数式编程的核心概念,如高阶函数、闭包和递归,这些都是开始编写脚本的基础。 在标签中,“clojure”指的是我们关注的语言本身,...
1. **数据结构**:Clojure拥有丰富的内建数据结构,如向量、列表、映射和集合,这些在构建游戏状态和逻辑时非常有用。例如,游戏板可以表示为二维向量,每个元素代表一个方块或空格。 2. **函数式编程**:Clojure...
1. **基础语法**:介绍Clojure的基本语法,如S表达式、符号、数字、字符串、布尔值等,并演示如何在Clojure中读写这些基本类型。 2. **函数与高阶函数**:Clojure的函数是第一类公民,可以作为参数传递,也可以作为...
通过阅读和理解这些代码,你可以加深对Clojure语法的理解,掌握函数式编程的思维方式,并提升解决实际问题的能力。同时,该项目也是一个很好的起点,可以帮助你构建自己的Clojure算法库,进一步提升编程技能。 总结...
这个“clojure-misc”项目似乎是一系列Clojure语言的练习,旨在帮助学习者加深对Clojure语法、函数式编程特性和常用库的理解。 1. **函数式编程基础**: - Clojure鼓励使用函数来解决问题,避免使用副作用,这有助...
首先,我们需要了解Clojure的基本语法。Clojure以其特有的括号表达式(S-expressions)闻名,其中每个表达式都是一个可调用的对象。例如,`(defn name [params] body)` 是定义函数的语法,`name`是函数名,`params`...
1. **课程大纲**:概述了培训的各个主题和学习目标,可能包括函数式编程基础、Clojure语法、数据结构、宏、多线程特性等。 2. **讲义和幻灯片**:详细讲解Clojure的各个方面,包括函数、序列、持久数据结构、REPL...
Clojure 是一种基于 Lisp 语法的函数式编程语言,它运行在 Java 虚拟机(JVM)上,充分利用了 JVM 的性能和生态系统。在这个名为 "clojure-examples" 的项目中,我们看到一系列的 Clojure 示例代码,旨在帮助开发者...
通过以上解析可以看出,Clojure Cheat Sheet覆盖了Clojure语言的基本语法、内置函数、宏以及其他常用的功能,这对于初学者来说是一个非常有用的资源。它不仅帮助用户快速掌握Clojure的核心概念,还提供了实际编程中...
"clojure-dsl-resources"是专门为那些希望在Clojure中构建DSL的开发者准备的一份精选资源集合,旨在帮助他们更高效地处理自然语言处理(NLP)、解析、数据转换等任务。 首先,DSL是一种设计语言,它针对某一特定...
这个指南旨在帮助参与者逐步理解Clojure的基本概念、语法和特性,通过一系列的研讨会活动,深入掌握Clojure在实际开发中的应用。下面我们将详细探讨Clojure的核心知识点及其在实践中的应用。 首先,Clojure是基于...
Clojure拥有丰富的第三方库,覆盖了Web开发、数据库操作、科学计算等多个领域。例如,Ring作为HTTP库,Compojure用于构建Web路由,Leiningen是项目管理工具,AOT(Ahead-of-Time)编译器可以将Clojure代码编译成...