检查数组是否只包含来自另一个数组的元素VB.NET

时间:2012-03-28 13:58:36

标签: vb.net arrays contains

使用具有非常基本的自然语言识别功能的Visual Basic.NET控制台应用程序 - 它只需要处理单词的特定字段,因此并不难。我把逻辑全部写在纸上,但我遇到了一个问题。

我希望应用程序检查用户输入是否只包含有效的单词。

当用户输入内容时,我使用一个函数将其剪切为只有字母数字字符,并使用string.split方法创建一个包含用户输入的单独单词的数组。我现在要做的是将输入数组与另一个数组(一组完整的有效单词)进行比较,如果输入数组只包含有效单词数组中存在的元素,则返回错误消息。

例如,如果所有有效单词都是“ALPHA”,“BETA”和“GAMMA”。 当使用输入类似“ALPHA BETA”的东西时 - 程序将接受输入。 如果输入为“APPLES”,则它将返回错误消息,因为字符串APPLE不是有效字数组的成员。

我希望我的问题足够明确,任何人都请帮忙。感谢。

4 个答案:

答案 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