こんなんでいかがですか?
すいません、VB4しかやってないんです、VBAはやったけど(ぼそ):脳内構成99%が「食」の奇跡(笑)
メモ帳で書いたのをVisual Studio に貼り付けてエラーでなかったからとりあえずエントリ。
Imports System
Imports System.TextPublic Class Program
Public Shared Sub Main()
Dim items As String() = {"A", "B", "C", "D", "E", "F", "G"}
Console.WriteLine(Program.BuildFromBitAndItems(69, items, "-"))
End Sub
Public Shared Function BuildFromBitAndItems(ByVal bit As Integer, ByVal items As String(), ByVal joinString As String) As String
' 対象を拾い出すのは別メソッドにお願い。
Dim pickedItems As List(Of String) = Program.Pickup(Of String)(bit, items)
' 文字列の組み立てはこのメソッドでいいか。
Dim result As New StringBuilderFor i As Integer = 0 To pickedItems.Count - 1
If i = pickedItems.Count - 1 Then
result.Append(pickedItems(i))
Else
result.Append(pickedItems(i))
result.Append(joinString)End If
Next
Return result.ToString
End Function
Public Shared Function Pickup(Of T)(ByVal bit As Integer, ByVal items As T()) As List(Of T)
Dim base2 As String = Convert.ToString(bit, 2)
If base2.Length > items.Length Then
Throw New ArgumentException("配列の長さが足りないっぽいけど・・・。")
End If
Dim pickedItems As New List(Of T)
Dim lastIndex As Integer = base2.Length - 1
' Step って久しぶりに使ったよ・・・。
For i As Integer = lastIndex To 0 Step -1If base2.Chars(i) = "1"c Then
pickedItems.Add(items(lastIndex - i))
End If
Next
Return pickedItems
End Function
End Class