我目前正在尝试创建一个培训外语的程序。 为此,我有两个单维数组。在第一个我存储所有外国音节或单词,在第二个我用我的母语存储答案:
$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++
}
该程序按预期工作,但当我今天向同事展示时,他只是告诉我程序的比较部分是丑陋的,并且不是最佳实践。
我怎么能以其他方式解决这个问题?我读了一些关于多维数组的内容,但我无法绕过它。我将如何从多维数组中受益?我如何从中选择我需要的值来显示,比较,检查等等?
答案 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++
}