ユーザーが文字列を入力するための4つのテキストボックスが順番にあります。文字列にカンマが含まれている場合、それはスピルされます。文字列ごとに、ダッシュを使用して次の文字列と連結します。この問題を視覚化するには:
Dim str1 = "A1,A2"
Dim str2 = "2,3"
Dim str3 = "4A,4B"
Dim str4 = "7,8"
フォーマット:str1& "-"&str2& "-"&str3& "-"&str4
出力は(昇順で)次のようになります。
{"A1-2-4A-7", "A1-2-4A-8", "A1-2-4B-7", "A1-2-4B-8",
"A1-3-4A-7", "A1-3-4A-8", "A1-3-4B-7", "A1-3-4B-8",
"A2-2-4A-7", "A2-2-4A-8", "A2-2-4B-7", "A2-2-4B-8",
"A2-3-4A-7", "A2-3-4A-8", "A2-3-4B-7", "A2-3-4B-8"}
カンマがない場合は、単一の文字列として扱われます。
私はなんとか上記の結果を達成することができました:
Private Sub GenerateString(ByVal str1 As String, ByVal str2 As String, ByVal str3 As String, ByVal str4 As String)
Dim arr1 As New List(Of String)
Dim arr2 As New List(Of String)
Dim arr3 As New List(Of String)
Dim arr4 As New List(Of String)
SpliString(str1, arr1)
SpliString(str2, arr2)
SpliString(str3, arr3)
SpliString(str4, arr4)
Dim arrMain As New ArrayList
arrMain.Add(arr1)
arrMain.Add(arr2)
arrMain.Add(arr3)
arrMain.Add(arr4)
Dim listCom As New List(Of String)
For Each tempList As List(Of String) In arrMain
If tempList.Count > 0 Then
If listCom.Count = 0 Then
listCom.AddRange(tempList)
Else
Dim listTemp As New List(Of String)
listTemp.AddRange(listCom)
listCom.Clear()
For Each tempStrMain As String In listTemp
For Each tempStr As String In tempList
listCom.Add(tempStrMain & "-" & tempStr)
Next
Next
End If
End If
Next
Return listCom
End Function
Private Sub SpliString(ByVal strToSplit As String, ByRef arrString As List(Of String))
If Not strToSplit = "" Then
If strToSplit.Contains(",") Then
Dim splitArr() As String = strToSplit.Split(",")
For Each str As String In splitArr
arrString.Add(str)
Next
Else
arrString.Add(strToSplit)
End If
End If
End Sub
今私の質問は、文字列のグループで文字列を並べ替えるにはどうすればよいですか?たとえば、str3が一番上で選択された文字列のグループである場合、次のようになります。
出力は(3番目の文字列グループによって)次のようになります。
"A1-2-4A-7", "A1-2-4A-8", "A1-3-4A-7", "A1-3-4A-8",
"A2-2-4A-7", "A2-2-4A-8", "A2-3-4A-7", "A2-3-4A-8",
"A1-2-4B-7", "A1-2-4B-8", "A1-3-4B-7", "A1-3-4B-8",
"A2-2-4B-7", "A2-2-4B-8", "A2-3-4B-7", "A2-3-4B-8"
str4がソートするために選択されたグループである場合、出力:
"A1-2-4A-7", "A1-2-4B-7", "A1-3-4A-7", "A1-3-4B-7",
"A2-2-4A-7", "A2-2-4B-7", "A2-3-4A-7", "A2-3-4B-7",
"A1-2-4A-8", "A1-2-4B-8", "A1-3-4A-8", "A1-3-4B-8",
"A2-2-4A-8", "A2-2-4B-8", "A2-3-4A-8", "A2-3-4B-8"
DataTable、ArrayList、IComparerを使用するようなメソッドはありますか?また、GenerateStringコードを書き直すためのより良い方法はありますか?n個の入力(現在は4としてハードコーディングされています)もサポートするのに十分な動的なコードがあれば、より良いでしょう。