内容纲要
数据结构用来组织多段数据,主要有三种类型:数组,ArrayList和哈希表
01 数组
可以用一个变量表示一组元素。
$colorPicker = @('blue', 'white','yellow')
可以掺杂数字吗?可以
$color = @(1,2, "2daw",4)
$color
1
2
2daw
4
访问数组元素 $color[-1]返回最后一个元素。从0开始,这都很正常。
范围运算符可以访问数组的多个元素,
$colorpicker[1..3]
数组添加
$colorpicker += 'black'
一次添加多个元素
$colorpicker += @('white', 'green')
数组元素比较难删除,且没有-=这样的符号。
02 ArrayList
数组不太灵活,因为每次添加元素,实际上是删除旧数组,重新创建新数组,PowerShell的数组大小是固定的,所以只能这么删除新建,所以大型数组的处理,性能影响非常明显。
ArrayList的创建只需要在声明前添加 [System.Collections.ArrayList]
[System.Collections.ArrayList]@('wad','asdawd',6)
ArrayList的行为基本上与PowerShell数组一样,只有一个明显区别:大小不固定。
ArrayList有哪些属性和方法呢?
Get-Member -InputObject $color
TypeName:System.Collections.ArrayList
Name MemberType Definition
---- ---------- ----------
Add Method int Add(System.Object value), int IList.Add(System.Object value)
AddRange Method void AddRange(System.Collections.ICollection c)
BinarySearch Method int BinarySearch(int index, int count, System.Object value, System.Collections.IComparer comparer), int BinarySearch(System.Object value), int BinarySearch(System.Object value, System.Collections.IComparer comparer)
Clear Method void Clear(), void IList.Clear()
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
Contains Method bool Contains(System.Object item), bool IList.Contains(System.Object value)
CopyTo Method void CopyTo(array array), void CopyTo(array array, int arrayIndex), void CopyTo(int index, array array, int arrayIndex, int count), void ICollection.CopyTo(array array, int index)
Equals Method bool Equals(System.Object obj)
GetEnumerator Method System.Collections.IEnumerator GetEnumerator(), System.Collections.IEnumerator GetEnumerator(int index, int count), System.Collections.IEnumerator IEnumerable.GetEnumerator()
GetHashCode Method int GetHashCode()
GetRange Method System.Collections.ArrayList GetRange(int index, int count)
GetType Method type GetType()
IndexOf Method int IndexOf(System.Object value), int IndexOf(System.Object value, int startIndex), int IndexOf(System.Object value, int startIndex, int count), int IList.IndexOf(System.Object value)
Insert Method void Insert(int index, System.Object value), void IList.Insert(int index, System.Object value)
InsertRange Method void InsertRange(int index, System.Collections.ICollection c)
LastIndexOf Method int LastIndexOf(System.Object value), int LastIndexOf(System.Object value, int startIndex), int LastIndexOf(System.Object value, int startIndex, int count)
Remove Method void Remove(System.Object obj), void IList.Remove(System.Object value)
RemoveAt Method void RemoveAt(int index), void IList.RemoveAt(int index)
RemoveRange Method void RemoveRange(int index, int count)
Reverse Method void Reverse(), void Reverse(int index, int count)
SetRange Method void SetRange(int index, System.Collections.ICollection c)
Sort Method void Sort(), void Sort(System.Collections.IComparer comparer), void Sort(int index, int count, System.Collections.IComparer comparer)
ToArray Method System.Object[] ToArray(), array ToArray(type type)
ToString Method string ToString()
TrimToSize Method void TrimToSize()
Item ParameterizedProperty System.Object Item(int index) {get;set;}
Capacity Property int Capacity {get;set;}
Count Property int Count {get;}
IsFixedSize Property bool IsFixedSize {get;}
IsReadOnly Property bool IsReadOnly {get;}
IsSynchronized Property bool IsSynchronized {get;}
SyncRoot Property System.Object SyncRoot {get;}
2.2 ArrayList 元素的添加与删除
调用 Add函数
$colorPicker.Add('gray')
删除使用Remove()
$colorPicker.Remove("key")
删除元素之前不需要知道索引,如果数组中有多个元素值相同,那么删除离头部最近的元素。
元素个数小于100个,数组和ArrayList的性能区分不大。
03 哈希表
如果只关注数据在列表中的位置,使用数组或者ArrayList即可,但如果我们想将两个数据对应起来,可以使用哈希表(字典)。
哈希表区分数组的显著特征是不使用数字索引,通过key去获取value。
哈希表的创建
$users = @{
abertram = 'Adam Bertram'
rawaoisjd = 'Raquel Cerillo'
zewad = 'Justin Zheng'
}
注意 PowerShell不允许创建有重复key 的哈希表,且每个 key都要唯一指向一个value,这个值可以是数组。
哈希表的访问
$users[abertram]
或者使用 .
$users.abertram
3.1 读取哈希表的所有key 和 value
$users.keys
$users.values
3.2 添加和修改哈希表的元素
#users.add([key], [value])
#users[key] = value
3.3 删除哈希表中的元素
$users.remove[key]