質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

779閲覧

【powershell】キーが配列であるHashTableで値の参照ができない

退会済みユーザー

退会済みユーザー

総合スコア0

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2023/02/21 05:36

実現したいこと

powershellでExcel操作をするために、「行」・「列」・「値」を持つデータの塊を作ることが目的です。

発生している問題・エラーメッセージ

現在、キーが配列であるHashTableという形で上記のデータを作成しようとしています。
{ [row, col], value}

値を格納することは問題なくできるのですが、以下のようにしても参照ができません。
・値の格納

powershell

1$data = @{} # 空のHashTableを宣言 2$data[@(10, 10)] = "value1" 3if (-not [string]::IsNullOrEmpty($data[@(10, 10)])) { 4 write-host("test") # ここを通らない 5}

参照時に別の配列を作成してしまっているため同一のキーではないと判断されることが原因かと考えています。
HashTableにはこだわらないので、3つのデータを保持し、追加・更新・参照ができるような方法をご存じの方がいらっしゃいましたら教えていただきたいです。

補足情報(FW/ツールのバージョンなど)

powershellのバージョンは5.1です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2023/02/21 06:00

配列はハッシュが取れないのでキーにできませんが、タプルはできます。
退会済みユーザー

退会済みユーザー

2023/02/21 06:02

情報ありがとうございます! 試してみます!
Zuishin

2023/02/21 06:15

次のように記述が長くなります。 タプルを作成する関数を作成して使用するのが良いと思います。 $data[[System.ValueTuple[int,int]]::new(10,10)] = 10
退会済みユーザー

退会済みユーザー

2023/02/21 06:31

ご丁寧にありがとうございます。 教えて頂いた方法でやりたかったことの動作確認ができました。 別の関数にする方向も検討してみます。 大変助かりました。ありがとうございました!!
退会済みユーザー

退会済みユーザー

2023/02/21 06:33

すみません、ベストアンサーとして登録するために、回答欄の方にコメントいただいてもよろしいでしょうか。 お手数をおかけしますがよろしくお願い致します。
Zuishin

2023/02/21 06:36

今ある自分の回答を質問の回答として成り立つ表現に書き換え、それをベストアンサーに選んでください。 配列はハッシュが取れないと書きましたが、正確には配列の GetHashCode を呼び出すと、中身に無関係なハッシュが取得できます。
退会済みユーザー

退会済みユーザー

2023/02/21 06:41

承知しました。 ありがとうございます。
guest

回答1

0

ベストアンサー

コメント欄で教えていただいた方法にて解決致しました。

補足
こちらのサイトも参考にし、以下のようなイメージで解決しました。
https://devblogs.microsoft.com/scripting/using-a-tuple-in-powershell/

値を入れる

powershell

1$keys = [System.Tuple]::Create(10, 10) 2$hashTable[$keys] = "test"

参照する

powershell

1$keys2 = [System.Tuple]::Create(10, 10) 2write-host($hashTable[$keys2]) # 出力結果:test

投稿2023/02/21 06:31

編集2023/02/22 05:34
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問