多维数组如何在PowerShell中工作?

时间:2017-01-05 12:54:43

标签: arrays powershell multidimensional-array

我目前正在尝试创建一个培训外语的程序。 为此,我有两个单维数组。在第一个我存储所有外国音节或单词,在第二个我用我的母语存储答案:

$QuestionArray = New-Object System.Collections.ArrayList
$QuestionArray = "Word1","Word2","Word3"

$AnswerArray = New-Object System.Collections.ArrayList
$AnswerArray = "Answer1","Answer2","Answer3"

然后我检查输入的值是否在答案数组内。如果是,我从问题数组中选择索引和随机选择的单词的索引。如果两个索引都匹配,那么问题的答案是正确的,否则就是错误的。

$RandomQuestion = $QuestionArray | Get-Random
$Answer = $InputTextbox.Text
$IndexPositionQuestion = [array]::indexof($QuestionArray, $RandomQuestion)
$IndexPositionAnswer = [array]::indexof($AnswerArray, $Answer)

If($IndexPositionAnswer -eq $IndexPositionQuestion){
    $RightTextbox.Text = $script:countercorrect++
}else{
    $WrongTextbox.Text = $script:counterwrong++
}  

该程序按预期工作,但当我今天向同事展示时,他只是告诉我程序的比较部分是丑陋的,并且不是最佳实践。

我怎么能以其他方式解决这个问题?我读了一些关于多维数组的内容,但我无法绕过它。我将如何从多维数组中受益?我如何从中选择我需要的值来显示,比较,检查等等?

1 个答案:

答案 0 :(得分:3)

在深入研究多维数组之前,为什么不尝试像哈希表这样的数组呢?

$array = @(
 @{
  Question = 'blah?'
  Answer = 'blub'
 },
 @{
  Question = 'james'
  Answer = 'Dean'
 } 
)

您可以通过

引用这些值
  for($i = 0; $i -lt $array.Count; $i++){
   $array[$i].Question
   $array[$i].Answer
  }

在你的示例中尝试类似

的内容
$RandomQuestionNr = 0..($QuestionArray.count -1) | Get-Random
$Answer = $InputTextbox.Text

if($array[$RandomQuestionNr].answer -eq $Answer){
    $RightTextbox.Text = $script:countercorrect++
}else{
    $WrongTextbox.Text = $script:counterwrong++
}