实现方法
1.采用最基本的遍历判别方法
代码如下:
全局变量:
ArrayList ValueArrayList= new ArrayList () ; //存放字段值
ArrayList ShapefileArrayList = new ArrayList(); //存放矢量图层
bool isIn=false ; //判断字段值是否在ValueArrayList数组中
ValueArrayList开始是空的,遍历属性所有值,逐一判别是否存在于其中,不在就添加进去,在的话就不添加,直至全部遍历完成。
(string field)为所遍历的字段名称,比较值的时候转化为string来比较。
private void GetUniqueValue(IFeatureClass pFeatureClass,string field)
{
IFeatureCursor pFeatureCursor;
IQueryFilter pFilter = new QueryFilterClass();
pFilter.WhereClause = null;
pFeatureCursor = pFeatureClass.Search(pFilter, false);
IFeature pFeature = pFeatureCursor.NextFeature();
int indexofField = pFeatureCursor.FindField(field);
ValueArrayList.Add(pFeature.get_Value (indexofField).ToString ());
while (pFeature != null)
{
string FieldValue = pFeature.get_Value(indexofField).ToString ();
FieldIsIn(ValueArrayList,FieldValue);
if (isIn == true)
{
ValueArrayList.Add(FieldValue);
}
pFeature = pFeatureCursor.NextFeature();
}
}
判断当前属性值(string fid)是否在ArrayList fids数组中,在就返回false,否则返回true
private void FieldIsIn(ArrayList fids, string fid)
{
foreach (object str in fids)
{
if (str.ToString().CompareTo(fid) == 0)
{
isIn = false;
break;
}
else
isIn = true;
}
}
缺点
遍历方法效率比较低下,特别是字段属性数量多了之后会比较慢。