【原创】VBA学习笔记(304)VBA数组array基础知识(2):数组更适合整体处理,字典更适合操作每个元素

1 数组更像1个整体,而字典更像1个集合适合逐个处理。

  • 设计数组和字典的人,目的性很不同

  • 理解array 和 dictionary 两者的定位有很多差别

1.1 数组的特点

1.1.1数组方便的操作----数组最好用的方法是:循环

  • 数组整体赋值     arr1=range()
  • (动态)数组整体改变赋值
  • 取得数组的上下限制,lbound()  和 ubound()

1.1.2 数组不方便的操作

  • 统计数组的个数?         很困难吧
  • 数组的元素怎么添加?  很困难吧
  • 数组的元素怎么删除?  很困难吧,好像不能删除,只能置空

1.1.3 数组的主要操作方法

  • 基本只能依靠循环  for each  或 for i = 1 to 2 
  • 也可以array(i) 的方式操作某个元素,但没 字典 方便

1.1.4 数组设计者的意图-------把数组当一个整体使用

  • 感觉更适合整体处理,而不是处理里面的某个元素
  • VBA中使用数组的目的,一般是为了方便、高效。
  • 怎么达到方便高效,就是把数组当一个整体处理。

1.1.5 数组可以方便的生成其他数组的方法, filter() 筛选--可实现删除某元素效果

Sub test1001()
arr1 = Array(1, 2, 3, 4, 5, 5, 5)

arr2 = Filter(arr1, 5, True)
show_arr1 (arr2)


arr3 = Filter(arr1, 5, False)
show_arr1 (arr3)

End Sub


Function show_arr1(x)  '写的这个只能针对一维数组

For Each I In x
   Debug.Print I;
Next
Debug.Print
End Function

 

1.2 字典的特点

1.2.1 字典很方便的方法和属性 ( 内置了很多好用的方法 和 属性 )

  • 字典的key是不会重复的
  • 字典可以用 dict(key) 查找,如果没有则会添加item
  • 字典很有很方便的,删除,增加字典元素
  • Dict.add
  • Dict.remove()
  • Dict.removeall()

 

1.2.2 字典的属性

  • dict()          赋值用
  • dict.item()   等同于 dict() 
  • dict.key()    很特殊,用来改变key值
  • dict.count
  • dict.comparemode

 

1.2.3 字典的方法

  • dict.add key item       增加一对 key-item
  • dict.remove(key)    
  • dict.removeall
  • dict.exists(key)
  • dict.keys()                生成数组1
  • dict.items()              生成数组2

 

1.3 比较

  • 数组更像一个整体不适合拆开处理,而字典更像集合适合处理单个元素
  • 数组更像一个整体
  • 字典更像集合
  • 如果是在过程中,需要删除某个值,常用的是字典或集合,而不是使用数组。
  • 设计者的目的很明显,就是当整体使用尽量这样吧

 

2 如果一定要删除数组的某个元素

  • 方法1:置空,但这个位置仍保留着
  • 方法2: 循环的过程中删除,然后主动生成1个新的数组,因为原数组并不会改变

在数组中删除某些元素并重新生成不含这些元素的数组,

如果必须这么做,一般循环遍历是唯一正确的做法。

 

Sub test_arr1()

arr1 = Range("a1:a10")

For I = LBound(arr1) To UBound(arr1)
   For J = LBound(arr1, 2) To UBound(arr1, 2)
       Debug.Print "arr1(" & I & "," & J & ")="; arr1(I, J)
   Next
Next
Debug.Print


arr1(1, 1) = ""
Debug.Print "置空单元格后"
For I = LBound(arr1) To UBound(arr1)
   For J = LBound(arr1, 2) To UBound(arr1, 2)
       Debug.Print "arr1(" & I & "," & J & ")="; arr1(I, J)
   Next
Next
Debug.Print



Debug.Print "删除某个元素"
Dim arr2()
m = 1
For I = LBound(arr1) To UBound(arr1)
   For J = LBound(arr1, 2) To UBound(arr1, 2)
       If Not arr1(I, J) = 4 Then
          ReDim arr2(m)
          arr2(m) = arr1(I, J)
          Debug.Print "arr2(" & m & ")="; arr2(m)
          m = m + 1
       Else
       
       End If
   Next
Next
Debug.Print


End Sub

 

3 如果要对数组进行去重处理(利用字典)

 

Sub test_arr2()

arr1 = Range("a1:a10")


Dim dict1 As Object
Set dict1 = CreateObject("scripting.dictionary")

For Each I In arr1
   dict1(I) = ""
Next


Debug.Print "被字典净化去重后的数组"
For I = LBound(arr1) To UBound(arr1)
   For J = LBound(arr1, 2) To UBound(arr1, 2)
       Debug.Print "arr1(" & I & "," & J & ")="; arr1(I, J)
   Next
Next
Debug.Print

Debug.Print "被字典净化去重后的数组变化的新数组dict1.keys()"
For Each I In dict1.keys()
    Debug.Print I
Next



End Sub

 

发布了370 篇原创文章 · 获赞 45 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/xuemanqianshan/article/details/103893773
今日推荐