使用具有非常基本的自然语言识别功能的Visual Basic.NET控制台应用程序 - 它只需要处理单词的特定字段,因此并不难。我把逻辑全部写在纸上,但我遇到了一个问题。
我希望应用程序检查用户输入是否只包含有效的单词。
当用户输入内容时,我使用一个函数将其剪切为只有字母数字字符,并使用string.split方法创建一个包含用户输入的单独单词的数组。我现在要做的是将输入数组与另一个数组(一组完整的有效单词)进行比较,如果输入数组只包含有效单词数组中存在的元素,则返回错误消息。
例如,如果所有有效单词都是“ALPHA”,“BETA”和“GAMMA”。 当使用输入类似“ALPHA BETA”的东西时 - 程序将接受输入。 如果输入为“APPLES”,则它将返回错误消息,因为字符串APPLE不是有效字数组的成员。
我希望我的问题足够明确,任何人都请帮忙。感谢。
答案 0 :(得分:3)
也许您正在寻找像All() - Method这样的东西,它会检查集合中的每个元素是否满足条件。请考虑以下示例:
Dim validWords = {"ALPHA", "BETA", "GAMMA"}
Dim thisIsNotValid = {"ALPHA", "APPLES"}.All(Function(word) validWords.Contains(word))
Dim thisIsValid = {"ALPHA", "BETA"}.All(Function(word) validWords.Contains(word))
thisIsNotValid
将评估为False
,而thisIsValid
将评估为True
。
答案 1 :(得分:2)
我会使用Except,http://msdn.microsoft.com/en-us/library/bb300779.aspx
Private AllowedWords As String() = {"these", "are", "good", "words"}
Sub Main()
Dim badUserInput As String() = {"these", "are", "bad", "words"}
Dim badWords As IEnumerable(Of String) = badUserInput.Except(AllowedWords)
If badWords.Any Then
' User has entered a disallowed word
Throw New ArgumentException(String.Format("Words '{0}' are not allowed", String.Join(",", badWords)))
End If
End Sub
我还写了一篇关于不久前加入馆藏的不同方式的博客:
http://dotnetrene.blogspot.co.uk/2012/01/joining-collections-in-linq-contains-vs.html
答案 2 :(得分:1)
您可以使用HashSet(T)来存储您允许的字词。 HashSet.Contains
是一个O(1)操作,而不是在其他集合中找到的O(n),这使得HashSet(T)
更有效。
Private Shared AllowedWords As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) From
{
"Alpha", "Beta", "Gamma"
}
Public Shared Function WordsAreValid(ParamArray words() As String) As Boolean
For Each word As String In words
If Not AllowedWords.Contains(word) Then Return False
Next
Return True
End Function
答案 3 :(得分:1)
在您的情况下,没有必要使用数组作为数据结构。相反,您可以在System.Collections.Specialized.NameValueCollection
课程中存储有效单词列表。然后,您可以针对存储在System.Collections.Specialized.NameValueCollection
类中的有效单词列表测试每个用户输入。
如何在System.Collections.Specialized.NameValueCollection
课程中存储有效单词:
请参阅this。
如何检查System.Collections.Specialized.NameValueCollection
课程中是否有有效的词条:请参阅this