powershellの変数アクセスについてのメモ
定義されている構造とは違う構造でアクセスした場合、読み取りはできるけど、書き込みは有効にならない感じがすることのメモ
要素3つの配列、その要素に要素3つのハッシュがあるものを定義する。
> $person=@(@{id=1;name="Taro";height=175},@{id=2;name="Jaro";height=173},@{id=1;name="Saburo";height=176})
> $person[0]
Name Value
---- -----
name Taro
id 1
height 175
> $person[0].GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Hashtable System.Object
> $person[0].name
Taro
> $person[0].name.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
構造通りのアクセスについては予想通り。
配列を無視して1つのハッシュっぽく読み取りアクセスしてみると、
> $person.name
Taro
Jaro
Saburo
> $person.name.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
> $person.name[1]
Jaro
> $person.name[1].GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
配列を単体のようにアクセスすると、その結果が配列として返却される。
便利な気がするが、(適当に作っても動いてしまって、あとでメンテが辛そうといった)危なっかしい気もする。
次は書き込み。
まずは、構造通りのアクセスで変更してみると、
> $person[0].height
175
> $person[0].height=180
> $person[0].height
180
予想通り変更された。
配列を無視して1つのハッシュっぽく書き込みアクセスしてみると、
> $person.height[0]
180
> $person.height[0]=175
> $person.height[0]
180
エラーは発生せず値は書き換わらない。
> $person
Name Value
---- -----
name Taro
id 1
height 180
name Jaro
id 2
height 173
name Saburo
id 1
height 176
一旦180に書き換えた後に入力した175の値はどこに行っちゃったんだろう。
2025年3月20日木曜日
Powershellの配列アクセス
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿