ES6 Set 数据结构

admin2021-01-15  83

/*
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成 Set 数据结构。
*/

import util.metaProperty
 
class Set{
	ctor(t,...){
		if(type(t)!="table") t = {t,...}
		this = ..table.unique(t)
	}
	@_metaProperty;
}

namespace Set{
    
    var pop = ..table.pop;
    var find = ..table.find;
    var push = ..table.push;
    var remove = ..table.remove;
    
	_metaProperty = ..util.metaProperty(
		add = function(v,...){
			if(type(v)!="table") v = {v,...}
			owner = reduce(v,function(p,n){
				if(!find(p,n) ) push(p,n)
				return p
			},owner)
			return owner; 
		}
		delete = function(v){
			return !!remove(owner, find(owner,v)||0)  
		}
		has = function(v){
			return !!find(owner, v); 
		}
		clear = function(){
			pop(owner,#owner)
		}
		size = { _get = lambda() #owner };
	)	
}

// 测试代码
if(owner) return ; 

import console
var set = Set({1,1,3,4,4,5});
console.varDump( set )

// 添加某个值,返回 Set 结构本身
set.add(8,"4",9).add(18) 

// 删除某个值,返回一个布尔值,表示删除是否成功
console.varDump(  set.delete(4) )

// 返回一个布尔值,表示该值是否为 Set 的成员
console.varDump( set.has(4) )
// 清除所有成员,没有返回值
set.clear()

set.add(999,,888,,777)
//返回Set实例的成员总数
console.log( set.size )

console.varDump(  set )
console.pause(true);
转载请注明原文地址: http://www.aardio.net/read-136.html
最新回复(0)