tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: 効率的なパンデジタル数作成方法が分かりません
投稿日: 2017/04/19(Wed) 05:14
投稿者nis9036
魔界の仮面弁士 様
ありがとうございました。
早速試してみます。
ListBoxを使うと遅いと分かっていたので実際には配列を使っていました。
因みに18時間ぐらい廻していますが120万件ほど集まっていました。

> > 10桁のパンデジタル数を作るとなると処理時間が膨大です。
>
> ListBox を使う以上、実用に耐える速度にはならないでしょう。
> BeginUpdate/EndUpdate を併用したとしても、
> せいぜい 32K 件程度が許容限界かと。
>
>
> とりあえず、仮想リストビューに表示させてみました。
> ListView、Button、CheckBox を貼っておいてください、
>
>
> ======= Form =======
> Public Class Form1
>
>     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
>         'Dim CH As Char() = "1".ToCharArray()
>         'Dim CH As Char() = "12".ToCharArray()
>         'Dim CH As Char() = "123".ToCharArray()
>         'Dim CH As Char() = "1234".ToCharArray()
>         'Dim CH As Char() = "12345".ToCharArray()
>         Dim CH As Char() = "123456".ToCharArray()
>         'Dim CH As Char() = "1234567".ToCharArray()
>         'Dim CH As Char() = "12345678".ToCharArray()
>         'Dim CH As Char() = "123456789".ToCharArray()
>         'Dim CH As Char() = "1234567890".ToCharArray()
>
>         Cursor.Current = Cursors.WaitCursor
>         Dim q = CH.GetPermutation()
>
>         '先頭が0で始まる数字を取り除くか?
>         If CheckBox1.Checked Then
>             q = q.Where(Function(c) c(0) <> "0"c)
>         End If
>
>         pandigital = q.Select(Function(c) New String(c)).ToArray()
>
>         ListView1.VirtualListSize = pandigital.Length
>         Cursor.Current = Cursors.Default
>
>         MsgBox("検出件数:" & pandigital.Length.ToString("#,0"), MsgBoxStyle.Information)
>     End Sub
>
>     Private pandigital(-1) As String
>
>     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
>         ListView1.VirtualMode = True
>         ListView1.Columns.Add("Text")
>         ListView1.View = View.Details
>         ListView1.VirtualListSize = 0
>     End Sub
>
>     Private Sub ListView1_RetrieveVirtualItem(sender As Object, e As RetrieveVirtualItemEventArgs) Handles ListView1.RetrieveVirtualItem
>         If e.ItemIndex < pandigital.Length Then
>             If e.Item Is Nothing Then
>                 e.Item = New ListViewItem()
>             End If
>             e.Item.Text = pandigital(e.ItemIndex)
>         End If
>     End Sub
> End Class
>
>
>
> ======= Module =======
> Module PermutationExtensions
>     <System.Runtime.CompilerServices.Extension()> _
>     Public Function GetPermutation(Of T)(this As T()) As IEnumerable(Of T())
>         If this.Length = 1 Then
>             Return New T()() {this}
>         Else
>             Return this.SelectMany( _
>                 Function(v) GetPermutation(this.Except(New T() {v}).ToArray()), _
>                 Function(v, p) New T() {v}.Concat(p).ToArray())
>         End If
>     End Function
> End Module
>
>
>
>
> なお、1133 のように、同じ文字が含まれるようなパターンについては考慮していません。
> 同じ文字を含むケース(11 桁以上の 10 進数など)にも対応させるのであれば、
> 下記が参考になるかもしれません。VB ではなく C# ですけれども。
> http://d.hatena.ne.jp/taguo/20080722/1216745650

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
タイトル (できるだけ短く簡潔に)
メッセージ   図表モード   注意! 全角で40文字以内 (下記テキストボックスの範囲内) 【改行処理】 を必ずして下さい。   【マルチポスト】(複数の掲示板で同じ質問をする事) 【返信】(お礼) のできない方の投稿は、お断りします。 [注意事項]をよく読んでから投稿して下さい。    URLの投稿 は、最初の1文字を除いて ttp://hanatyan.sakura.ne.jp/ のようにして投稿して下さい。
暗証キー (英数字で8文字以内)
投稿キー (投稿時 投稿キー を入力してください)
  • 当掲示板をご利用になる場合は、必ず【掲示板ご利用に際し】をよく読んでからご利用願います。

  •   プレビュー
  • 質問される前に【当サイト内外の検索】を使って下調べをして下さい。

  • ★★★ 下記から自分の投稿記事を[修正]することができます ★★★
    処理 記事No 暗証キー
      累計    本日 昨日
    [.NET用掲示板] [VB6.0用掲示板] [サンプル投稿用掲示板] [雑談用掲示板]   [ツリー表示へ] [注意事項] [ワード検索] [Home]