すいません、VB4しかやってないんです、VBAはやったけど(ぼそ) チラシの裏だって立派な書き込み空間なんだからねっ!資源の有効活用なんだからねっ!とか偉そうに言ってるけど、実は色々と書き残したいだけ

だからなに? どうしろと? くるみサイズの脳みそしかないあやしいジャンガリアンベムスターがさすらう贖罪蹂躙(ゴシックペナルティ)

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  632  : 記事  35  : コメント  11674  : トラックバック  143

ニュース


片桐 継 は
こんなやつ

かたぎり つぐ ってよむの

大阪生まれ河内育ちなんだけど
関東に住みついちゃったの
和装着付師だったりするの
エセモノカキやってたりするの
VBが得意だったりするの
SQL文が大好きだったりするの
囲碁修行中だったりするの
ボトゲ好きだったりするの
F#かわいいよF#

正体は会った人だけ知ってるの

空気読まなくてごめんなさいなの


わんくまリンク

C#, VB.NET 掲示板
C# VB.NET掲示板

わんくま同盟
わんくま同盟Blog


WindowsでGo言語
WindowsでGo言語


ネット活動


SNSは疲れました

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

イベント活動

プログラムの活動

これのリベンジ中(ひつこい)

で、ちょこっとまた変えてみました。みなさんのアドバイスを元に今度はInteger.Parseも利用。ビット判定をシフト式でできると言う事を思い出してここまで変更。


Protected Function BitToItem(ByVal oBit As Object, ByVal aLabels() As String, ByVal sJoinStr As String) As String
'ビット数値と配列から、ビットONとなっている相対配列の文字列を連結して返す

 'リターンワークの準備
 Dim retStr As String = ""
 '変換用数値
 Dim wInt As Integer = Integer.Parse("0" & oBit.ToString)
 'ビットを01の2進数配列にセット
 Dim wArray() As Char = Convert.ToString(wInt, 2).ToCharArray

 'ビットONにあわせて、配列の値を連結
 For i As Integer = LBound(wArray) To UBound(wArray)
  If CBool(wInt And (1 << i)) Then
    retStr += aLabels(i) & vbCr
  End If
 Next

 Return retStr.TrimEnd(CChar(vbCr)).Replace(vbCr, sJoinStr)

End Function


次の課題は、渡された数字が最大何ビットを持つのかを取る事。今って、CharArrayにして配列とって回数にしてるから、ここがまだスマートになると思う。天邪鬼なのでDoWhileで2で割り続ける……ではない方法でこう、なんかありそうな気がしてるんだけど……むぅ。

で、えぴさんちでのこれから玉子様のロジックで「ぴきーんっ」があって、ちょっとまた改変。


Protected Function BitToItem(ByVal oBit As Object, ByVal aLabels() As String, ByVal sJoinStr As String) As String
'ビット数値と配列から、ビットONとなっている相対配列の文字列を連結して返す

 'リターンワークの準備
 Dim retStr As String = ""
 '変換用数値
 Dim wInt As Integer = Integer.Parse("0" & oBit.ToString)

 'ビットONにあわせて、配列の値を連結
 For i As Integer = 0 To Convert.ToString(wInt, 2).Length
  If CBool(wInt And (1 << i)) Then
    retStr += aLabels(i) & vbCr
  End If
 Next

 Return retStr.TrimEnd(CChar(vbCr)).Replace(vbCr, sJoinStr)

End Function


こんなカンジ。よく考えたら、配列ワークを取るって必要がなくなっちゃったわけだから、配列の上限がわかってしまえば良いはず。後はビット飛ばして時が見えたらOK~!!って何か違うような気がするがきっとそうだ。ほんとか?
投稿日時 : 2007年7月24日 14:07

コメント

# re: 脳内1%は秘密(笑) 2007/07/24 14:31 NAO
むぅ。


# re: 脳内1%は秘密(笑) 2007/07/24 16:56 επιστημη
ぉぅ、さーすがMVPopiたまご。


# re: 脳内1%は秘密(笑) 2007/07/24 17:56 ぽぴ王子
なんか、行ったり来たりですが(笑)

CBool() って不要?
If (wInt And (1 << i)) <> 0 Then
とかで書けないかなあ。

あと、retStr を StringBuilder にするといいんじゃない?とか。
String 型って代入するたびに領域確保し直すんですよ。
ってあれ、vbCr で連結しないで sJoinStr をつければ、最後の
Replace って不要じゃね?とかキュピーンと来た。

> 配列の上限がわかってしまえば

僕が前のコードで 2 で割り続けてたのは、割っていって 0 になったら
おしマイケル♪って言えるからだったり。

# re: 脳内1%は秘密(笑) 2007/07/24 18:23 片桐
>CBool() って不要?
>If (wInt And (1 << i)) <> 0 Then
>とかで書けないかなあ。

これは確かにこのロジックでいけたっぽいです。

でもStringBuilder がまだよくうごいてくれない……
appendしてくのは良いのですけれど、結局最後のsJoinStr を切らなきゃならないからそこがスマートに行かないですね。

うむむむむ



# re: 脳内1%は秘密(笑) 2007/07/24 18:34 とりこびと
エントリしようかと思ったらεπιστημη さんにネタ元にされてちょっぴり寂しくなっていましたが...

えっと・・・Visual Basic 8.0脳で書いてみればいいのかにゃ?w

# re: 脳内1%は秘密(笑) 2007/07/24 19:00 シャノン
うーむ…
http://blog.goo.ne.jp/miku-yotubabiyori/e/f221dd931d772699acb84ae215dba5b6

# re: 脳内1%は秘密(笑) 2007/07/25 9:33 片桐
>とりこさん

そーなの、進化してるほうのVB脳なの。

>シャノさん
>NAOさん

うーむぅぅぅぅ。。。


# re: 脳内1%は秘密(笑) 2007/07/25 11:32 とりこびと
のってけのってけのってけてけてけ~♪

http://d.hatena.ne.jp/torikobito/20070725/p3

# hchMBkjaJOkEtkH 2011/12/22 22:14 http://www.discreetpharmacist.com/fre/index.asp
Read, of course, far from my topic. But still, we can work together. How do you feel about trust management?!...

# maillot de foot 2013 2013/01/24 7:30 http://www.maillotdefoot2013.info/
avant de partir pour faire face au New England Revolution sur Juin 30 . et Eddie Johnson dirigé une au début de la 64e , Une victoire contre les champions en titre aura certainement une augmentation de moral pour les Sounders ? mais de toute évidence Player et informations sur le jeu de ESPN ! Et quelques instants avant de chance Burch. mais nous cherchons à notre gameplan et nous avons besoin pour exécuter ce? Pause dit .
maillot de foot 2013 http://www.maillotdefoot2013.info/

Post Feedback

タイトル
名前
Url:
コメント