ネストされた 2 つの for ループは、2 つの単語の組み合わせに対して実行します。
Dim s = "heavy duty cable reel".Split()
For i As Integer = 0 To s.Length - 2
For k As Integer = i + 1 To s.Length - 1
Console.WriteLine(s(i) + " " + s(k))
Next
Next
出力は
頑丈な
重いケーブル
重いリール
デューティケーブル
デューティリール
ケーブルリール
アップデート
これは、2 から単語数 - 1 までのすべての句の長さを取得するバージョンです。このためのクラスを作成しました。
Public Class PhraseBuilder
Private words As String()
Private phrases As List(Of String)
Public Function GetList(ByVal initialPhrase As String) As List(Of String)
words = initialPhrase.Split()
phrases = New List(Of String)()
For phraseLength As Integer = 2 To words.Length - 1
AddPhrases("", 0, phraseLength)
Next
Return phrases
End Function
Private Sub AddPhrases(ByVal phrase As String, ByVal start As Integer,
ByVal wordCount As Integer)
If wordCount >= 1 Then
For i As Integer = start To words.Length - wordCount
AddPhrases(phrase + " " + words(i), i + 1, wordCount - 1)
Next i
Else
phrases.Add(phrase.TrimStart())
End If
End Sub
End Class
あなたはそれをテストすることができます
Sub PrintPhrases()
Dim phraseBuilder = New PhraseBuilder()
Dim phrases = phraseBuilder.GetList("heavy duty cable reel")
For Each phrase As String In phrases
Console.WriteLine(phrase)
Next
End Sub
結果は次のようになります。
頑丈な
重いケーブル
重いリール
デューティケーブル
デューティリール
ケーブルリール
頑丈なケーブル
ヘビーデューティーリール
重いケーブルリール
デューティケーブルリール
ここで再帰を使用したことに注意してください。再帰により、for ステートメントを任意の深さにネストできます。StringBuilderフレーズの先頭のコピーを作成する必要があるため、は使用しませんでした。これは、不変であるため、自動的に行う文字列を使用すると簡単に実行できます。を複製する簡単な方法はありませんStringBuilder。