ここから本文です

vb.net2003で開発しています。 取得したArrayListを以下の文字列で取得したいので...

mei********さん

2010/2/218:02:40

vb.net2003で開発しています。
取得したArrayListを以下の文字列で取得したいのですが
ロジックを教えてください。

_arlDay = {1,3,4,5,8,11,20,21,22,28,30,31}を
strDay = "1,3~5,8,11,20~22,28,30~31"といった具合です。
こんな感じまで作ったのですが良い案が思い浮かびません。
どなたかご教授願います。

Private Function GetstrDay(ByVal _arlDay As ArrayList) As String

Dim strDay As StringBuilder
Dim lastDay As Integer

lastDay = _arlDay(0)
With strDay
.Append(_arlDay(0))
For i As Integer = 0 To _arlDay.Count - 1

If lastDay = CType(_arlDay(i), Integer) - 1 Then

Else

End If

Next
End With
End Function

閲覧数:
420
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

hot********さん

2010/2/305:16:23

こんなのではどうでしょうか?
ところでArrayListを_arlDay = {1,3,4,5,8,11,20,21,22,28,30,31}で初期化できましたっけ?
と言うわけで、普通のIntegerの配列の場合です。
最初と最後以外は、前後の関係で[,値]か[~値]か[表示しない]が決まると思います。
ちなみに最初は必ず値を表示して、最後は次が無いので前との関係のみで[,値]か[~値]の表示が変わると思います。

Sub sample()
Dim _arlDay() As Integer = {1, 3, 4, 5, 8, 11, 20, 21, 22, 28, 30, 31}
Dim strDay As String = GetstrDay(_arlDay)
MessageBox.Show(strDay)
End Sub

Private Function GetstrDay(ByRef _arlDay() As Integer) As String
Dim strDay As String = _arlDay(0).ToString '一番最初は必ず数値
For i As Integer = 1 To _arlDay.Count - 2 '2番目から最後の1つ前まで
If _arlDay(i) = _arlDay(i - 1) + 1 Then '1つ前と連続で
If _arlDay(i) <> _arlDay(i + 1) - 1 Then '次が連続でなければ
strDay &= "~" & _arlDay(i).ToString '~値
End If
Else '1つ前と連続でなければ
strDay &= "," & _arlDay(i).ToString ',値
End If
Next
'最後のデータ用処理(次との関係をチェックしない)
Dim ub As Integer = UBound(_arlDay) '最後の位置
If _arlDay(ub) = _arlDay(ub - 1) + 1 Then '1つ前と連続なら
strDay &= "~" & _arlDay(ub).ToString '~値
Else '1つ前と連続でなければ
strDay &= "," & _arlDay(ub).ToString ',値
End If
Return strDay
End Function

質問した人からのコメント

2010/2/3 10:11:13

回答ありがとうございます。早速実装してみます。
ちなみに_arlDay は違うメソッドでDBから日付を取得し、日にちのみを配列で渡そうとしてました。
DBには8桁のStringで入ってるんで日にちのみをSubStringして型を変えてと
なんかややこしい処理です。
説明不足ですいません。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる