2025年3月20日木曜日

Powershellの配列アクセス

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月19日水曜日

インタフェース2025年2月号追実行断念。

私にはハードルが高すぎた。
MIKE環境の作成には、・・・を展開します。とあるが、どこからnormal_mike_xxx.tar.gzをダウンロードすればよいかわからない。
第3部4章では、リスト1から14まで参照しているがそのリストがどこにあるかわからない。などなど。
関わっていても時間が溶けるだけで身になることはなさそうなので諦めよう。