集合

集合(set)是一种包含不同元素的数据结构。

集合中的元素称为成员。

集合的两个最重要特性是:首先,集合中的成员是无序的;其次,集合中不允许相同成员存在。

code

function Set(){
var me = this;
me.dataStore = [];
me.add = add;
me.remove =remove;
me.size = size;
me.union = union;
me.intersect = intersect;
me.subset = subset;
me.difference = difference;
me.show = show;
me.contains = contains; function add(data){
if(me.dataStore.indexOf(data)<0){
me.dataStore.push(data)
me.dataStore.sort();
return true;
}else{
return false;
}
}
function remove(data){
var pos = me.dataStore.indexOf(data);
if(pos>-1){
me.dataStore.splice(pos,1)
return true;
}else{
return false;
} } /**
* 合并集合
* @param set
*/
function union(set){
var tempSet = new Set();
for(var i=0;i<me.dataStore.length;i++){
tempSet.add(me.dataStore[i])
}
for(var i=0;i<set.dataStore.length;i++){
if(!tempSet.contains(set.dataStore[i])){
tempSet.add(set.dataStore[i])
}
}
return tempSet;
} /**
* 寻找交集
*/
function intersect(set){
var tempSet = new Set();
for(var i=0;i<me.dataStore.length;i++){
if(set.contains(me.dataStore[i])){
tempSet.add(me.dataStore[i])
}
}
return tempSet;
} /**
* 判断是否子集
* @param set
* @returns {boolean}
*/
function subset(set){
if(me.size()>set.size()) {
return false;
}else{
for(var i in me.dataStore){
if(!(set.contains(me.dataStore[i]))){
return false;
}
} }
return true; } /**
* 比较2集合不同 并返回
* @param set
* @returns {Set}
*/
function difference(set){
var tempSet = new Set();
for(var i=0;i<me.dataStore.length;i++){
if(!set.contains(me.dataStore[i])){
tempSet.add(me.dataStore[i])
}
}
return tempSet;
} /**
* 获取该集合长度
* @returns {Number}
*/
function size(){
return me.dataStore.length;
}
/**
* 显示该集合
* @returns {Array}
*/
function show(){
console.log(me.dataStore)
return me.dataStore;
} /**
* 检查该成员是否属于该集合
* @param data
* @returns {boolean}
*/
function contains(data){
if(me.dataStore.indexOf(data)>-1){
return true;
}else{
return false;
}
}
}

tests

//集合测试
var names = new Set();
names.add("David");
names.add("Jennifer");
names.add("Cynthia");
names.add("Mike");
names.add("Raymond");
//show 测试
names.show();
//remove测试
names.remove("David")
names.show() //union 合并集合 测试
var cis = new Set();
cis.add("Mike");
cis.add("Clayton");
cis.add("Jennifer");
cis.add("Raymond");
var dmp = new Set();
dmp.add("Raymond");
dmp.add("Cynthia");
dmp.add("Jonathan"); var it = cis.union(dmp);
it.show() //交集测试
var inter = cis.intersect(dmp)
inter.show(); //判断是否子集
var it2 = new Set();
it2.add("Cynthia");
it2.add("Clayton");
it2.add("Jennifer");
it2.add("Danny");
it2.add("Jonathan");
it2.add("Terrill");
it2.add("Raymond");
it2.add("Mike");
var dmp2 = new Set();
dmp2.add("Cynthia");
dmp2.add("Raymond");
dmp2.add("Jonathan");
console.log("dmp2 是否是it2 子集:"+dmp2.subset(it2)) //找不同 var d = it2.difference(dmp2)
d.show();

最新文章

  1. Mybatis配置一对多的关联关系(五)
  2. hsql数据库使用详解(入门)及快速使用
  3. mvc之页面强类型
  4. 简单理解在Mac OS X上运行ASP.NET程序
  5. ubuntu14 部署zookeeper3.4.6启动失败
  6. CSS Sprite 雪碧图制作
  7. [OC Foundation框架 - 15] NSDate
  8. BZOJ1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛
  9. Cocos2d-x学习笔记(9)(CCTextFieldTTF使用输入框)
  10. C#的Main(String[] args)参数输入问题
  11. 裸板驱动总结(makefile+lds链接脚本+裸板调试)
  12. python_开发规范
  13. c#异步学习笔记
  14. HDU2035
  15. SVG辅助标签
  16. [Vijos1130][NOIP2001]数的计数 (递推)
  17. linux&amp;php:ubuntu安装php-7.2
  18. HDU 6126.Give out candies 最小割
  19. 朴素贝叶斯文本分类实现 python cherry分类器
  20. Linux终端里的记录器

热门文章

  1. web本地存储-IndexedDB
  2. linux中ctrl+z、ctrl+d和ctrl+c的区别
  3. 网易云课堂_C语言程序设计进阶_第三周:结构:结构、类型定义、联合
  4. iOS 开发常用设置
  5. mysql中多个字段共同确定唯一性
  6. C#的输入输出及基本类型
  7. 列&quot;xx&quot;不在表Table中
  8. Hadoop Eclipse远程连接出现:Error:Call to /10.10.10.10:9000 failed on local exception: java.io.EOFException
  9. R 语言学习笔记
  10. zoj1013 Great Equipment