2

私はリッチテキストボックスを持っていて、単語を配列に変換しました。次に、長さと出力を受け取るコードがあります...唯一の問題は、配列のすべての異なる値をループしてチェックする方法がわからないことです。配列の個々の部分の長さ。

(私はこれをTextChangedに設定しています)

        Dim len1, len2, len3, len4, len5, len6, len7, len8, len9, len10, len11, len12, len13, len14, len15 As Integer
    Dim input As String
    Dim words As String()
    Dim length As Integer

    input = RichTextBox1.Text


    words = input.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries)

    For Each w In words

        length = Len(w)

        Select Case length


            Case 1
                len1 = len1 + 1
            Case 2
                len2 = len2 + 1
            Case 3
                len3 = len3 + 1
            Case 4
                len4 = len4 + 1
            Case 5
                len5 = len5 + 1
            Case 6
                len6 = len6 + 1
            Case 7
                len7 = len7 + 1
            Case 8
                len8 = len8 + 1
            Case 9
                len9 = len9 + 1
            Case 10
                len10 = len10 + 1
            Case 11
                len11 = len11 + 1
            Case 12
                len12 = len12 + 1
            Case 13
                len13 = len13 + 1
            Case 14
                len14 = len14 + 1
            Case 15
                len15 = len15 + 1

        End Select

    Next








    letcount.onelet.Text = Val(len1)
    letcount.twolet.Text = Val(len2)
    letcount.threelet.Text = Val(len3)
    letcount.fourlet.Text = Val(len4)
    letcount.fivelet.Text = Val(len5)
    letcount.sixlet.Text = Val(len6)
    letcount.sevenlet.Text = Val(len7)
    letcount.eightlet.Text = Val(len8)
    letcount.ninelet.Text = Val(len9)
    letcount.tenlet.Text = Val(len10)
    letcount.elevenlet.Text = Val(len11)
    letcount.twelevelet.Text = Val(len12)
    letcount.thirteenlet.Text = Val(len13)
    letcount.fourteenlet.Text = Val(len14)
    letcount.fifteenlet.Text = Val(len15)
4

4 に答える 4

1

bentataclearは、ForNextループの使用方法を示しました。LINQを使用できる場合は、次のコードを使用できます。

Sub Main
    Dim words As String() = {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten" }

    Dim lengthsOnly = words.Select(Function(w) w.Length).ToArray()

    Dim wordsAndLengths = words.Select(Function(w) New With { .Word = w, .Length = w.Length }).ToArray()

End Sub

最初のSelectは単語の長さのみを取得し、2番目のSelectは各単語とその長さの配列を返します。

于 2012-10-24T14:26:41.690 に答える
0

別のアレイを使用できますか?

Dim arr(14) as integer

Dim input As String
Dim words As String()
Dim length As Integer

input = RichTextBox1.Text

words = Split(input, " ")

For Each w in words

    Dim l as Integer = Math.Min(Len(w) - 1,14)
    arr(l) = arr(l) + 1

Next

編集

コメントの質問に答えて:

wは変数であり、ショートカットコードで宣言されていますFor Each w in words

ショートカットは変数を宣言しw、配列の各メンバーを変数に入力して、とwordsの間でコードを実行します。Fornext

ショートカットなしでこれを行うためのより長い方法は、次のようになります。

Dim i as Integer

For i = 0 to words.GetUpperBound(0) -1

    Dim w as string

    w = words(i)

    i = i + 1

    'Rest of code

Next i

次の部分は、最大14文字の単語の長さにDim l as Integer = Math.Min(Len(w) - 1,14)設定lされます。これは、15文字を超える単語があるかのように、配列に収まりません。

それを行う別の方法は次のとおりです。

Dim l as Integer 

l = Len(w) - 1

If l > 14 then
    l = 14
End If

arr(l) = arr(l) + 1
于 2012-10-24T13:54:53.823 に答える
0

二重スペースは空であると見なされるため、無視して入力できます。

    'HOW CAN I EXCLUDE DOUBLE SPACES 
    'AND INCLUDE IF SOMEBODY PRESSES ENTER?
    words = input.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries)
于 2012-10-24T14:39:01.903 に答える
0

デビッド、

あなたのためのいくつかの説明:

wは文字列です。コンパイラは、設計時にタイプを決定します。このSOスレッドを参照してください VB.NetForEach Loopは、タイプを推測するために何を調べますか

Dim words() As String = {"0", "1", "2"}
For Each w In words
    System.Windows.Forms.MessageBox.Show(w)
Next

タイプは、IEnumerableコレクション内の要素(配列、リストなど)を調べることにより、コンパイラーによって推測されます。インテリセンスは、wがジェネリックとして定義されているように見えても、設計時に文字列であることを認識します。自分で試してみてください...

しかし。もちろん、タイプを明示的に追加することもできます

Dim words() As String = {"0", "1", "2"}
For Each w As String In words
    System.Windows.Forms.MessageBox.Show(w)
Next

文字列配列の例は、省略形の便利さを実際には示していません。下記参照

Dim dictionaryOfDictionaries As New Dictionary(Of String, Dictionary(Of String, String))
For Each d As KeyValuePair(Of String, Dictionary(Of String, String)) In dictionaryOfDictionaries
    ' do something with each dictionary d
Next
' is identical to
For Each d In dictionaryOfDictionaries
    ' do something with each dictionary d
Next
于 2012-10-25T16:36:55.807 に答える