程序技术好文:符号化Symbol(符号)体系

简介: 程序技术好文:符号化Symbol(符号)体系

符号化Symbol(符号)体系


ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大类符号MarkerSymbol(点符号)、 LineSymbol(线符号)和FillSymbol(填充符号)来绘制地理要素的几何图形。此外还有两种特殊类型的符号:一种是TextSymbol用于文字标注;另一种是3D Chart符号,用于显示饼图等三维对象,如需详细了解请查找帮助文档。


1. MarkerSymbol对象


MarkerSymbol用于修饰点对象的符号,它拥有十三个子类如表2所示,其中不同的子类可以产生不同类型的点符号。所有的MarkerSymbol类都实现了IMarkerSymbol接口,这个接口定义了标记符号的公共方法和属性,如角度、颜色、大小和X,Y偏移量等


表二


点符号类型


描述


ArrowMarkerSymbol


预定义的肩头符号


BarChartSymbol


柱状图符号


CharacterMarker3DSymbol


三维字体符号


CharacterMarkerSymbol


字体符号


Marker3DSymbol


3D 符号


MultiLayerMarkerSymbol


多个符号叠加产生新点符号


PictureMarkerSymbol


图片符号(bmp或emf)


PiechartSymbol


饼图符号


SimpleMarker3DSymbol


简单3D符号


SimpleMarkerSymbol


简单符号


StackedChartSymbol


堆叠符号


TextMarkerSymbol


文字符号用来符号化点


常用的有以下5种 类型:


如何创建MarkerSymbol?接下来以SimpleMarkerSymbol构建为例演示如何创建一个点符号:


//创建SimpleMarkerSymbolClass对象


ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();


//创建RgbColorClass对象为pSimpleMarkerSymbol设置颜色


IRgbColor pRgbColor = new RgbColorClass();


pRgbColor.Red = 255;


pSimpleMarkerSymbol.Color = pRgbColor as IColor;


//设置pSimpleMarkerSymbol对象的符号类型,选择钻石


pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond;


//设置pSimpleMarkerSymbol对象大小,设置为5


pSimpleMarkerSymbol.Size = 5;


//显示外框线


pSimpleMarkerSymbol.Outline = true;


//为外框线设置颜色


IRgbColor pLineRgbColor = new RgbColorClass();


pLineRgbColor.Green = 255;


pSimpleMarkerSymbol.OutlineColor = pLineRgbColor as IColor;


//设置外框线的宽度


pSimpleMarkerSymbol.OutlineSize = 1;


如何使用这个符号,在接下来介绍Renderer对象的时候将为大家演示如何用创建的点符号去符号化一个图层。


2. LineSymbol对象


LineSymbol对象是用于修饰线型几何对象的符号,它拥有八个子类如表3所示,其中不同的子类可以产生不同类型的线符号,所有的LineSymbol类都实现了ILineSymbol接口, ILineSymbol定义了两个公共属性:Color和Width。


表三


线符号类型


描述


CartographicLineSymbol


实心或者虚线线符号


HashLineSymbol


离散线符号


MarkerLineSymbol


点线符号


MultiLayerLineSymbol


多符号叠加产生新线符号


PictureLineSymbol


图片线符号


SimpleLine3DSymbol


3D 线符号


SimpleLineSymbol


预定义风格的线符号


TextureLineSymbol (3DAnalyst)


纹理贴 图线符号


常用的LineSymbol如下图所示:


符号化Symbol(符号)体系


ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大类符号MarkerSymbol(点符号)、 LineSymbol(线符号)和FillSymbol(填充符号)来绘制地理要素的几何图形。此外还有两种特殊类型的符号:一种是TextSymbol用于文字标注;另一种是3D Chart符号,用于显示饼图等三维对象,如需详细了解请查找帮助文档。


1. MarkerSymbol对象


MarkerSymbol用于修饰点对象的符号,它拥有十三个子类如表2所示,其中不同的子类可以产生不同类型的点符号。所有的MarkerSymbol类都实现了IMarkerSymbol接口,这个接口定义了标记符号的公共方法和属性,如角度、颜色、大小和X,Y偏移量等


表二


点符号类型


描述


ArrowMarkerSymbol


预定义的肩头符号


BarChartSymbol


柱状图符号


CharacterMarker3DSymbol


三维字体符号


CharacterMarkerSymbol


字体符号


Marker3DSymbol


3D 符号


MultiLayerMarkerSymbol


多个符号叠加产生新点符号


PictureMarkerSymbol


图片符号(bmp或emf)


PiechartSymbol


饼图符号


SimpleMarker3DSymbol


简单3D符号


SimpleMarkerSymbol


简单符号


StackedChartSymbol


堆叠符号


TextMarkerSymbol


文字符号用来符号化点


常用的有以下5种 类型:


如何创建MarkerSymbol?接下来以SimpleMarkerSymbol构建为例演示如何创建一个点符号:


//创建SimpleMarkerSymbolClass对象


ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();


//创建RgbColorClass对象为pSimpleMarkerSymbol设置颜色


IRgbColor pRgbColor = new RgbColorClass();


pRgbColor.Red = 255;


pSimpleMarkerSymbol.Color = pRgbColor as IColor;


//设置pSimpleMarkerSymbol对象的符号类型,选择钻石


pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond;


//设置pSimpleMarkerSymbol对象大小,设置为5


pSimpleMarkerSymbol.Size = 5;


//显示外框线


pSimpleMarkerSymbol.Outline = true;


//为外框线设置颜色


IRgbColor pLineRgbColor = new RgbColorClass();


pLineRgbColor.Green = 255;


pSimpleMarkerSymbol.OutlineColor = pLineRgbColor as IColor;


//设置外框线的宽度


pSimpleMarkerSymbol.OutlineSize = 1;


如何使用这个符号,在接下来介绍Renderer对象的时候将为大家演示如何用创建的点符号去符号化一个图层。


2. LineSymbol对象


LineSymbol对象是用于修饰线型几何对象的符号,它拥有八个子类如表3所示,其中不同的子类可以产生不同类型的线符号,所有的LineSymbol类都实现了ILineSymbol接口, ILineSymbol定义了两个公共属性:Color和Width。


表三


线符号类型


描述


CartographicLineSymbol


实心或者虚线线符号


HashLineSymbol


离散线符号


MarkerLineSymbol


点线符号


MultiLayerLineSymbol


多符号叠加产生新线符号


PictureLineSymbol


图片线符号


SimpleLine3DSymbol


3D 线符号


SimpleLineSymbol


预定义风格的线符号


TextureLineSymbol (3DAnalyst)


纹理贴 图线符号


常用的LineSymbol如下图所示:


如何创建LineSymbol?接下来以MarkerLineSymbol构建为例演示如何创建一个线符号:


IArrowMarkerSymbol pArrowMarker = new ArrowMarkerSymbolClass();


IRgbColor pRgbColor = new RgbColorClass();


pRgbColor.Red = 255;


pArrowMarker.Color = pRgbColor as IColor;


pArrowMarker.Length = 10;


pArrowMarker.Width = 8;


pArrowMarker.Style = esriArrowMarkerStyle.esriAMSPlain;


IMarkerLineSymbol pMarkerLine = new MarkerLineSymbolClass();


pMarkerLine.MarkerSymbol = arrowMarker;


IRgbColor pLineColor = new RgbColorClass();


pLineColor.Blue = 255;


pMarkerLine.Color = pLineColor as IColor;


3. FillSymbol对象


FillSymbol是用来修//代码效果参考:http://hnjlyzjd.com/xl/wz_24151.html

饰如多边形等具有面积的几何形体的符号对象,它拥有十一个子类如表4所示它实现了IFillSymbol,这个接口定义了两个属性Color和OutLine,以满足所有类型的FillSymbol对象的公共属性设置。

表四


填充符号类型


描述


ColorRampSymbol (Carto)


用于渲染Raster数据的颜色带


ColorSymbol (Carto)


用于渲染Raster数据的颜色符号


DotDensityFillSymbol


点密度填充符号


GradientFillSymbol


渐变填充符号


LineFillSymbol


包含线符号的填充符号


MarkerFillSymbol


包含点符号的填充符号


MultiLayerFillSymbol


多符号叠加产生新填充符号


PictureFillSymbol


图片填充符号


RasterRGBSymbol


用于渲染Raster数据 RGBSymbol


SimpleFillSymbol


简单填充符号


TextureFillSymbol


纹理贴图填充符号


常用的FillSymbol如下图所示:


如何创建FillSymbol?接下来以MarkerLineSymbol构建为例演示如何创建一个线符号:


//为填充符号创建外框线符号


IColor pLineColor = new //代码效果参考:http://hnjlyzjd.com/hw/wz_24149.html

RgbColorClass();

ICartographicLineSymbol pCartoLineSymbol = new CartographicLineSymbolClass();


pCartoLineSymbol.Width = 2;


pCartoLineSymbol.Color = pLineColor;


//创建一个填充符号


ISimpleFillSymbol pSmplFillSymbol = new SimpleFillSymbol();


//设置填充符号的属性


IColor pRgbClr = new RgbColorClass();


IFillSymbol pFillSymbol = pSmplFillSymbol;


pFillSymbol.Color = pRgbClr;


pFillSymbol.Outline = pCartoLineSymbol;


如果没有ArcGIS Desktop使用经验的开发看了以上代码片段会一头雾水,不明白填充符号的创建为什么还要创建线符号等等,如果有ArcGIS Desktop使用经验就会非常容易理解这些符号的创建的机制,如图8是SimpleFillSymbol设置信息。所以熟悉ArcGIS Desktop的使用对开发人员进行ArcGIS Engine开发非常有用。


4. TextSymbol对象


TextSymbol对象是用于修饰文字元素的,文字元素在要素标注等方面很有用处。TextSymbol符号最重要的设置对象是它的字符,它实现了三个主要的接口来设置字符:ITextSymbol 、 ISimpleTextSymbol 和 IFormattedTextSymbol 。


ITextSymbol接口是定义文本字符样式的主要接口,它定义的ITextSymbol::Font属性是产生一个TextSymbol符号的关键。可以使用IFontDisp接口来设置字体的大小和是否是粗体、倾斜等属性。使用ITextSymbol接口还可以定义TextSymbol对象的颜色、角度、水平排列方式、垂直排列方式和文本等内容。


以下是一个构建TextSymbol的函数:


///


///生成文本符号


///


///


文本符号


///


字体名称


///


字体大小


///


字体颜色


public static void MakeTextSymbol(ref ITextSymbol pTxtSymbol, string sFontName, int iFont, int iColor)


{


try


{


pTxtSymbol.Font.Name = sFontName;


pTxtSymbol.Font.Size = (decimal)iFont;


IRgbColor pRGBColor = new RgbColorClass();


pRGBColor.RGB = iColor;


pTxtSymbol.Color = (IColor)pRGBColor;


pTxtSymbol.Angle = 0;


pTxtSymbol.RightToLeft = false;


pTxtSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHACenter;


pTxtSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVABaseline;


}


catch (Exception Err)


{


MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);


}


}


5. 3DChartSymbol对象


3DChartSymbol是一个抽象类,它拥有三个子类:BarChart、PieChart和StackedChart。如下图所示:


BarChartSymbol是最常用的三维着色符号,它使用不同类型的柱子来代表一个要素类中不同的属性,而柱子的高度取决于属性值的大小。


PieChartSymbol符号进行着色的方法是使用一个饼图来显示不同要素类中的不同属性,不同的属性按照它们的数值大小占有一个饼图中的不同比例的扇形区域。


PieChartSymbol符号进行着色的方法是使用一个饼图来显示不同要素类中的不同属性,不同的属性按照它们的数值大小占有一个饼图中的不同比例的扇形区域。


至于如何创建这些3DChartSymbol符号这里不再提供代码片段演示,读者可以根据前边学习的知识,自己操作ArcGIS Desktop使用3DChartSymbol制作专题图,然后根据ArcGIS Engine的帮助文档开发创建3DChartSymbol。


使用ServerStyle


如果熟悉ArcGIS Desktop的使用,就会对Style符号库文件有所了解,相对应的在ArcGIS Engine开发中对应的是ServerStyle符号库,它的结构体系如下图所示。可以通过专门的转换程序把ArcGIS Desktop Style符号库转换为ArcGIS Engine所能够使用的ServerStyle符号库。


用于获取ServerStyle符号库中的符号主要涉及到以下接口如表所示:



接口名称


功能描述


IStyleGallery


用于管理Style Gallery


IStyleGalleryStorage


管理Style Gallery中的符号库文件


IStyleGalleryClass


控制符号库中Style Gallery Class


IEnumStyleGalleryItem


枚举一组Style Gallery items


IStyleGalleryItem


定义Style Galle ry itme


4.5.1获取符号库中符号


如何获取到一个符号库中符号?接下来以获取ESRI符号库中名称为Rose的符号的流程:


1.首先构建一个ServerStyleGallery对象


2.其次使用IStyleGalleryStorage接口的AddFile方法加载ServerStyle文件


3.遍历ServerGallery中的Class,如果是FillSymbol使用IStyleGallery的GetItems方法返回一个可枚举的包含一系列StyleGalleryItem的EnumStyleGalleryItem对象。


4.遍历EnumServerStyleGalleryItme枚举对象中的StylegalleryItme如果名称是Rose即可获取ESRI符号库中名称为Rose的StylegalleryItme,然后通过IStyleGalleryItem的Item属性即可转换为ISymbol。


整个流程图如下图所示:


SymbologyControl控件


SymbologyControl用来显示ServerStyle符号库中的符号样式,可以选择在该控件上选择一个符号用来符号化一个图层或者作为一个Element的符号。使用SymbologyControl可以再设计的模式下在其属性页中加载ServerStyle符号库文件,同样也可以使用的LoadStyleFile和RemoveFile方法加载和移除Serverstyle符号库文件。运行效果如下图所示:


符号化之Renderer( 渲染)体系


ArcGIS Engine9.3对GIS数据的符号化分为矢量数据渲染和栅格数据渲染两大类。接下来分别介绍FeatureRender和RasterRender。


1. FeatureRender对象


FeatureRenderer是一个抽象类,它有15个子类负责进行不同类型的着色运算。它们都实现了IFeatureRenderer接口,这个接口定义了进行要素图层符号化的公共属性和方法。


可以通过IGeoFeatureLayer::Renderer属性获得一个要素图层的符号化对象


表四


要素符号化类型


描述


SimpleRender


简单符号化


UniqueValueRender


唯一值符号化


BiUniqueValueRender


双变量唯一值符号化


ChartRender


图表符号化


ClassBreaksRenderer


分类等级符号化


DotDensityRenderer


点密度符号化


ProportionalSymbolRenderer


根据属性值设置符号大小进行符号化


ScaleDependentRenderer


依比例尺符号化


RepresentationRenderer


制图表达符号化


CoTrackSymbologyRenderer(TrackingAnalyst)


轨迹符号化(应用于TrackingAnaylyst扩展模块)


EnhancedInfoRenderder(TrackingAnalyst)


增强信息符号化(应用于TrackingAnaylyst扩展模块)


UniqueValueTextRenderer(TrackingAnalyst)


唯一值文本符号化(应用于TrackingAnaylyst扩展模块)


NAStopRenderer(NetworkAnalyst)


停止符号化(应用于网络分析扩展模块)


FeatureVertexRenderer(SurveyExt)


要素定点符号化(应用于测量分析扩展模块)


SharedEdgeRenderer(EditorExt)


用于绘制拓扑元素


常用的要素符号化类型主要有以下6种类型,如下图所示:


2. RasterRender对象


RasterRender是一个抽象类,它有15个子类负责进行不同类型的着色运算。它们都实现了IRasterRender接口,这个接口定义了栅格图层符号化的公共属性和方法。可以通过IRasterLayer::Renderer属性获得一个栅格图层的符号化对象。


要素符号化类型


描述


RasterRGBRenderer


栅格RGB符号化


RasterUniqueValueRenderer


唯一值符号化


RasterColormapRenderer


双变量唯一值符号化


RasterClassifyColorRampRenderer


图表符号化


RasterStretchColorRampRenderer


分类等级符号化


RasterDiscreteColorRenderer


点密度 符号化


栅格符号化类型结构图如下图所示:


以下代码片段是对一个RasterLayer进行RasterStretchColorRampRenderer符号化操作:


///


/// StretchColorRamp符号化RasterLayer


///


///


RasterLayer


public void SetStretchColorRampRenderer(IRasterLayer pRasterLayer)


{


try


{


//创建RasterStretchColorRampRendererClass对象


IRasterStretchColorRampRenderer pRStretchRender= new RasterStretchColorRampRendererClass();


//QI到IRasterRenderer


IRasterRenderer pRasterRender=pRStretchRender as IRasterRenderer;


pRasterRender.Raster = pRasterLayer as IRaster;


pRasterRender.Update();


//创建两个起始颜色


IRgbColor pFromRgbColor = new RgbColorClass();


pFromRgbColor.Red = 255;


IRgbColor pToRgbColor = new RgbColorClass();


pToRgbColor.Blue = 255;


//创建起止颜色带


IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass();


pAlgorithmicColorRamp.Size = 255;


pAlgorithmicColorRamp.FromColor = pFromRgbColor as IColor;


pAlgorithmicColorRamp.ToColor = pToRgbColor as IColor;


bool btrue= true;


pAlgorithmicColorRamp.CreateRamp(out btrue);


//选择拉伸颜色带符号化的波段


pRStretchRender.BandIndex = 0;


//设置拉伸颜色带符号化所采用的颜色带


pRStretchRender.ColorRamp = pAlgorithmicColorRamp as IColorRamp;


pRasterRender.Update();


//符号化RasterLayer


pRasterLayer.Renderer = pRasterRender;


}


catch(Exception Err)


{


MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);


ArcGIS Engine开发 --图层符号化(四)


利用ESRI自带的符号库进行唯一值符号化一图层开发实例


实现唯一值符号化功能代码如下:


///


///获取符号库中符号


///


///


符号库全路径名称


///


GalleryClass名称


///


符号名称


///符号


private ISymbol GetSymbol(string sServerStylePath, string sGalleryClassName, string symbolName)


{


try


{


//ServerStyleGallery对象


IStyleGallery pStyleGaller = new ServerStyleGalleryClass();


IStyleGalleryStorage pStyleGalleryStorage = pStyleGaller as IStyleGalleryStorage;


IEnumStyleGalleryItem pEnumSyleGalleryItem=null;


IStyleGalleryItem pStyleGallerItem = null;


IStyleGalleryClass pStyleGalleryClass = null;


//使用IStyleGalleryStorage接口的AddFile方法加载ServerStyle文件


pStyleGalleryStorage.AddFile(sServerStylePath);


//遍历ServerGallery中的Class


for (int i = 0; i < pStyleGaller.ClassCount; i++)


{


pStyleGalleryClass = pStyleGaller.get_Class(i);


if (pStyleGalleryClass.Name != sGalleryClassName)


continue;


//获取EnumStyleGalleryItem对象


pEnumSyleGalleryItem = pStyleGaller.get_Items(sGalleryClassName, sServerStylePath, "");


pEnumSyleGalleryItem.Reset();


//遍历pEnumSyleGalleryItem


pStyleGallerItem = pEnumSyleGalleryItem.Next();


while (pStyleGallerItem != null)


{


if (pStyleGallerItem.Name == symbolName)


{


//获取符号


ISymbol pSymbol = pStyleGallerItem.Item as ISymbol;


System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumSyleGalleryItem);


System.Runtime.InteropServices.Marshal.ReleaseComObject(pStyleGalleryClass);


return pSymbol;


}


pStyleGallerItem = pEnumSyleGalleryItem.Next();


}


}


System.Runtime.InteropServices.Marshal.ReleaseComObject(pEnumSyleGalleryItem);


System.Runtime.InteropServices.Marshal.ReleaseComObject(pStyleGalleryClass);


return null;


}


catch (Exception Err)


{


MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);


return null;


}


}


///


///设置要素图层唯一值符号化


///


///


private void UniqueValueRenderFlyr(IFeatureLayer pFeatureLayer)


{


try


{


//创建UniqueValueRendererClass对象


IUniqueValueRenderer pUVRender = new UniqueValueRendererClass();


List pFieldValues= new List();


pFieldValues.Add("Hospital 2");


pFieldValues.Add("School 1");


pFieldValues.Add("Airport");


for(int i=0;i



{


ISymbol pSymbol= new SimpleMarkerSymbolClass();


pSymbol =GetSymbol(@"C:\Program Files\ArcGIS\Styles\ESRI.ServerStyle","Marker Symbols",pFieldValues【i】)


//添加唯一值符号化字段值和相对应的符号


pUVRender.AddValue(pFieldValues,pFieldValues,pSymbol);


}


//设置唯一值符号化的字段个数和字段名


pUVRender.FieldCount = 1;


pUVRender.set_Field(0, "类别");


IGeoFeatureLayer pGFeatureLyr = pFeatureLayer as IGeoFeatureLayer;


//设置IGeofeatureLayer的Renderer属性


pGFeatureLyr.Renderer = pUVRender as IFeatureRenderer;


}


catch (Exception Err)


{


MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);


}


}


private void button1_Click(object sender, EventArgs e)


{


IFeatureLayer pFeatureLayer = this.axMapControl1.get_Layer(0) as IFeatureLayer;


UniqueValueRenderFlyr(pFeatureLayer);


this.axMapControl1.Refresh();


}


设计GIS系统符号化模块


大家首先有个观念:用ArcEngine开发C/S应用程序时,一个成熟的GIS项目在加载数据这方面是不允许直接把SDE里边的数据以MXD的形式组织起来这是不科学的,原因如下:


1.从数据安全性考虑


一个MXD文档包含了SDE数据库里与MXD数据的详细信息,通常对于数据拥有者来说是不希望外部能够获取这些信息的。


2.从系统灵活性考虑


通过程序动态加载所需同层,动态符号化相关图层能够为程序带来很大的灵活性,例如根据不同的用户的权限从数据库加载不同的数据

相关文章
|
3月前
|
存储 API Windows
MASM32连接程序时error A2006: undefined symbol : u
MASM32连接程序时error A2006: undefined symbol : u
|
7月前
|
JavaScript 前端开发
ES6:什么是Symbol?
ES6:什么是Symbol?
85 1
|
7月前
ES6之Symbol
ES6之Symbol
|
7月前
|
JavaScript 前端开发
|
7月前
|
JavaScript 前端开发 开发者
|
1月前
|
设计模式 JavaScript 前端开发
es6加上symbol的基础数据类型
【10月更文挑战第30天】ES6 中的 `Symbol` 作为一种新的基础数据类型,为 JavaScript 提供了一种创建唯一标识符和处理对象属性名冲突的有效方式,丰富了 JavaScript 的数据类型体系和编程模式,在实际开发中具有重要的应用价值。
|
1月前
|
设计模式 JavaScript 前端开发
es6加上symbol的基础数据类型
【10月更文挑战第22天】ES6中的 `Symbol` 作为一种新的基础数据类型,为JavaScript提供了一种创建唯一标识符和处理对象属性名冲突的有效方式,丰富了JavaScript的数据类型体系和编程模式,在实际开发中具有重要的应用价值。
|
5月前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
55 1
|
5月前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
41 0
|
7月前
|
存储 JavaScript
ES6+新特性-Symbol与Set/Map数据结构
ES6 引入了三种新的数据结构:Symbol、Set和Map。Symbol是唯一且不可变的值,常用于定义对象的独特属性;Set存储不重复值,适合数组去重;Map则是键值对集合,键可为任意类型,提供了更灵活的存储方式。这些新数据结构提供了更高效的操作手段,分别解决了属性命名冲突、数据去重和复杂键值对存储的问题。示例展示了如何使用Symbol、Set和Map进行基本操作。