Groovy Tip 25 魔幻数组 五

             Groovy Tip 25 魔幻数组

 

 

本系列前面章节曾谈到过数组来模拟数学集合的一些操作,比如“交集”、“并集”、“集合求差”和“集合反转”等,都是集合的一些基本运算。但是,除此之外,还有一些集合的基本运算,如“属于”、“子集”等以及与它们的相关运算,却没有提及,因此在本节来一一谈到。

首先说“属于”运算,我们说如果一个对象是数组中的一个元素,就说这个对象“属于”那个数组,在Groovy语言中的操作符为“in”。示例代码如下:

 

     

      def list1 = [1,3,4,5,6]

     

      println (1 in list1)

 

运行结果为:

true

 

当然,如果如下的代码:

 

       println (9 in list1)

 

运行结果为:

false

 

当然,我们说一个对象“属于”一个数组,也可以说那个数组“包含”那个对象。因此,下面的代码是和上面的代码等价的:

 

       println list1.contains(1)

      

       println list1.contains(9)

 

 

知道了一个对象“属于”一个数组只是第一步,接下来我们可能想进一步知道数组里有多少个这样的对象:

 

 

       def list3 = ['a','b','c']

      

       println list3.count('a')

   

 

运行结果为:

1

 

同样的:

 

       println (['a','b','a','c'].count('a'))

      

       println (['a','b','a','c'].count('d'))

      

 

运行结果为:

2

0

 

 

当然了,我们对元素在数组中的位置也是相当的关心,“indexOf”方法会告诉我们对象在数组中的第一个的位置:

 

       println (['a','b','a','c'].indexOf('a'))

   

 

运行结果为:

0

 

当然,我们也可以知道对象在数组中的最后一个的位置,“lastIndexOf”方法会告诉我们。如下:

 

       println (['a','b','a','c'].lastIndexOf('a'))

   

 

运行结果为:

2

 

如果一个对象不包含在一个数组中,那么“indexOf”方法的返回值则是“-1”,示例代码如下:

 

       println (['a','b','a','c'].indexOf('d'))

   

 

运行结果为:

-1

 

说完了“属于”运算及其相关的方法,接着就是说说“子集”运算了,判断一个数组是否是另一个数组的“子集”不能使用“in”操作符了,而要使用“containsAll”方法,示例代码如下:

 

 

 

       def list4 = ['a','b','c','d']

      

       def list5 = ['a','d']

      

       println list4.containsAll(list5)

 

       println list4.containsAll(['a','e'])

      

   

 

运行结果为:

true

false

 

而下面的代码:

 

       def list6 = ['a','b','a']

      

       println list6.containsAll(['a','b'])

      

   

 

运行结果为:

true

 

前面的篇幅谈到过两个数组的“交集”,现在的问题是怎么判断是否有“交集”呢?在Groovy语言中也有特别的方法来判断,请看下面的例子:

 

       println list4.disjoint(['e','f','a'])

      

       println list4.disjoint(['e','f'])

      

   

 

运行结果为:

false

true

 

list4和集合“['e','f','a']”有一个相同的元素“a”,当然是有“交集”,则“disjoint”方法返回false;而list4和集合“['e','f']”则完全没有相同的元素,因而返回true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Groovy 中,你可以使用 `JsonSlurper` 类来反序列化 JSON 数据,包括数组。下面是一个示例,用于从 JSON 数据中反序列化一个字符串数组: ``` import groovy.json.JsonSlurper def json = '["apple", "banana", "cherry"]' def slurper = new JsonSlurper() def myArray = slurper.parseText(json) assert myArray instanceof List assert myArray.size() == 3 assert myArray[0] == "apple" assert myArray[1] == "banana" assert myArray[2] == "cherry" ``` 在上面的示例中,我们首先定义了一个包含字符串数组的 JSON 字符串。然后,我们创建了一个 `JsonSlurper` 对象,并使用其 `parseText` 方法将 JSON 字符串解析为 Groovy 中的对象。最后,我们检查了 `myArray` 对象是否是一个 `List` 类型的对象,并检查了数组中的元素是否正确。 如果 JSON 数据中包含的是对象数组,那么你可以将其反序列化为一个包含多个对象的列表,如下所示: ``` import groovy.json.JsonSlurper def json = '[{"name": "apple", "price": 1.0}, {"name": "banana", "price": 2.0}, {"name": "cherry", "price": 3.0}]' def slurper = new JsonSlurper() def myList = slurper.parseText(json) assert myList instanceof List assert myList.size() == 3 assert myList[0].name == "apple" assert myList[0].price == 1.0 assert myList[1].name == "banana" assert myList[1].price == 2.0 assert myList[2].name == "cherry" assert myList[2].price == 3.0 ``` 在上面的示例中,我们定义了一个包含对象数组的 JSON 字符串。我们使用 `JsonSlurper` 类的 `parseText` 方法将其反序列化为包含三个对象的列表。我们检查了 `myList` 对象是否是一个 `List` 类型的对象,并检查了每个对象的属性是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值