更简单的方法从groovy中的列表中获取重复项

时间:2018-04-12 15:30:44

标签: groovy

鉴于清单:

list: [
   object1: {
     id: 22,
     name: "Tom"
   },
   object2: {
     id: 12,
     name: "Mary"
   },
   object3: {
     id: 44,
     name: "Tom"
   }
]

除了使用嵌套循环之外,是否有任何其他单行程序只能从此列表中获得重复的名称?因此,返回列表将是["Tom"]

2 个答案:

答案 0 :(得分:2)

另一种方法是用计数对它们进行分组,找到计数大于1的所有数据:

var items = [Item]()

func updateCoinData(json : JSON) {

    if let coinData = json[].arrayObject {

        self.items = coinData as! [Item]   //Thread 1: signal SIGABRT
    }else {

        print("cannot connect to the server")
    }

    self.tableView.reloadData()
}

答案 1 :(得分:1)

接近oneliner是以下代码。我们的想法是创建一个唯一命名元素的列表,并将其从原始列表中删除。

def list = [
    [ id: 22, name: "Tom"],
    [ id: 12, name: "Mary"],
    [ id: 44, name: "Tom"]
]

def unique = list.toUnique { a, b -> a.name <=> b.name }
list.removeAll(unique)
list*.name

removeAll返回booleon,因此如果需要1行代码,则会使其复杂化,唯一变量可以跟随方法调用。

注意,.toUnique()返回一个新集合.unique()从被调用的集合中删除。