タグ

arrayとCollectionに関するkiyo_hikoのブックマーク (11)

  • Converting VBA Collection to Array

    kiyo_hiko
    kiyo_hiko 2024/02/07
    ありがたい…。
  • VBA 配列とコレクションの違いをメモリ上のデータ構造から理解する - t-hom’s diary

    VBAでは複数データを格納できるデータ型として、配列とコレクションがある。 それぞれ一長一短あり、どちらが優れているというものではないのだが、どちらかといえばデータの追加・削除が簡単に行えるコレクションのほうが使い勝手は良いかもしれない。 さて、今回は配列とコレクションのデータ構造に焦点を当ててそれぞれの違いを説明する。 配列のデータ構造 例えばInteger型の配列を次のように作成する。 Dim Arr(3) As Integer Arr(0) = 10 Arr(1) = 20 Arr(2) = 30 Arr(3) = 40 すると、メモリ上には単に直列にデータが並ぶ。VBAのIntegerは2バイトなので、ちょうど2バイトずつ隙間なく配置される。 もし次のようにLong型で宣言したら、 Dim Arr(3) As Long Arr(0) = 100 Arr(1) = 200 Arr(2

    VBA 配列とコレクションの違いをメモリ上のデータ構造から理解する - t-hom’s diary
    kiyo_hiko
    kiyo_hiko 2019/05/09
    コレクションが連結リストな話
  • エクセルVBA 配列の速度比較

    ExcelVBAでプログラムを組む際に、大量のデータを処理するのに使うのが配列系の処理である。ただ、プログラムの組み方によっては処理時間に大きく差が出てくるようだ。データ量が少なければよいが、多くなってくると、処理時間が延びてしまい、使い勝手も悪くなる。そこでベストな配列の使い方を考慮してみる。 VBAでは主に配列として使えるのが、静的配列、動的配列、コレクションである。3択になるわけだがどれを選ぶのがよいだろうか? 試しに単純に変数を宣言して、適当なデータ(10,000,000個)を配列に書き込む時間を測定してみた。できるだけ高速で処理時間を短縮できるものを選択したい。 静的配列 Dim Dimtest(10000000) As String Do DoEvents Dimtest(i) = "テスト" & i If i = 10000000 Then Exit Do End If i

    エクセルVBA 配列の速度比較
    kiyo_hiko
    kiyo_hiko 2019/05/09
    意外にもコレクションが優秀であるという結果読んでビックリ
  • How do I implement Common Lisp's mapcar in Ruby?

    I want to implement Lisp's mapcar in Ruby. Wishful syntax: mul = -> (*args) { args.reduce(:*) } mapcar(mul, [1,2,3], [4,5], [6]) would yield [24, nil, nil]. Here is the solution I could think of: arrs[0].zip(arrs[1], arrs[2]) => [[1, 4, 6], [2, 5, nil], [3, nil, nil]] Then I could: [[1, 4, 6], [2, 5, nil], [3, nil, nil]].map do |e| e.reduce(&mul) unless e.include?(nil) end => [24, nil, nil] But I'

    How do I implement Common Lisp's mapcar in Ruby?
    kiyo_hiko
    kiyo_hiko 2015/11/11
    zip使ってmapcarもどき作る話。zipはreciever.zip(the_other)で二次元配列になる
  • Array#sort (Ruby 3.3 リファレンスマニュアル)

    sort -> Array[permalink][rdoc][edit] sort! -> self sort {|a, b| ... } -> Array sort! {|a, b| ... } -> self 配列の内容をソートします。要素同士の比較は <=> 演算子を使って行います。sort はソートされた配列を生成して返します。 sort! は self を破壊的にソートし、self を返します。 ブロックとともに呼び出された時には、要素同士の比較をブロックを用いて行います。ブロックに2つの要素を引数として与えて評価し、その結果で比較します。ブロックは <=> 演算子と同様に整数を返すことが期待されています。つまり、ブロックは第1引数が大きいなら正の整数、両者が等しいなら0、そして第1引数の方が小さいなら負の整数を返さなければいけません。両者を比較できない時は nil を返します。

    kiyo_hiko
    kiyo_hiko 2015/11/11
    宇宙船演算子でソートする
  • Array#filter (Ruby 3.3 リファレンスマニュアル)

    select -> Enumerator[permalink][rdoc][edit] filter -> Enumerator select {|item| ... } -> [object] filter {|item| ... } -> [object] 各要素に対してブロックを評価した値が真であった要素を全て含む配列を返します。真になる要素がひとつもなかった場合は空の配列を返します。 ブロックを省略した場合は Enumerator を返します。 例 [1,2,3,4,5].select # => #<Enumerator: [1, 2, 3, 4, 5]:select> [1,2,3,4,5].select { |num| num.even? } # => [2, 4] [SEE_ALSO] Enumerable#select [SEE_ALSO] Array#select!

    kiyo_hiko
    kiyo_hiko 2015/11/11
    remove-if-notとかfilter的な // even_upto_10 = 1.upto(10).select { |n| n % 2 == 0 }
  • Array to Hash Ruby

    Convert this Array: a = ["item 1", "item 2", "item 3", "item 4"] ...to a Hash: { "item 1" => "item 2", "item 3" => "item 4" } i.e. elements at even indexes are keys and odd ones are values.

    Array to Hash Ruby
    kiyo_hiko
    kiyo_hiko 2015/10/20
    通常はflattenしてHash[*flat_array]、2.1.0以降to_hが使えるので2次元な[[a,b],[c,d],...].to_hでハッシュ化できる。2次元化するなら1.upto(100).each_slice(2)的にやる
  • 配列の要素に特定の値が含まれているかチェックする方法 - Java 入門

    配列の要素としてある特定の値が含まれているかどうか、チェックしたい場合にどうしたらよいか説明します。 例えば "カレー", "ラーメン", "ハンバーグ" という三つの文字列の要素を値として持っている配列があった時に、 その中に "ホットドッグ" があるかどうかチェックする場合です。この場合は存在しないので false を返すことを考えます。 "ラーメン" があるかどうか、といえば、"ラーメン" は要素に含まれるので true を返す、というような場合です。 配列の操作のための java.util.Arrays クラス さて 「要素の中に特定の値を含むかどうか」 というチェックといえば、コレクションの contains メソッドがあります。 contains メソッドはまさに今ここで望んでいる動作をします。 しかしながら、あいにく配列では contains メソッドがありません。 では、ど

    配列の要素に特定の値が含まれているかチェックする方法 - Java 入門
    kiyo_hiko
    kiyo_hiko 2013/09/24
    ふつうにArrays.asListでいいのか。
  • Excel2007VBA配列変数の宣言について

    ●質問の主旨 (1)以下のコードのプロシージャを実行すると 12行目の変数myArrが選択され、「配列に割り当てられません」と エラーメッセージが返されます。これはなぜでしょうか? (2)(1)の原因は5行目の変数myArrの宣言について問題があるよう 気がしますが、どうすればいいのか分かりません? 以上2点について、1つだけでもご助言いただければ幸いです。 ご教示よろしく願いします。 ●質問の補足 下記のコードは「各支社の成績」(画像の下部)を 「業務成績通知書」(画像上部)に成績欄に差し込んで 各支社ごとのワークシートを印刷するためのコードです。 画像上部のワークシート名→差込印刷TARGET 画像下部のワークシート名→data ●コード Option Explicit Sub オートシェイプ1_Click() Dim myTar As Worksheet 'ワークシート差込印刷(ター

    Excel2007VBA配列変数の宣言について
    kiyo_hiko
    kiyo_hiko 2013/05/26
    例えばVBAで「Dim ns(5) As String : ns = Array(1, 2, 3, 4, 5)」とやると「配列には割り当てられません」てエラー。理由はArray関数が配列を作るけど配列じゃなくてVariant型で戻すから、ns As Variantと宣言する。何のための型付けなのか…
  • Access Tips #514 配列を使ったスタックのプロシージャ例 | T'sWare

    kiyo_hiko
    kiyo_hiko 2012/08/24
    VBAのコレクションだとかコンテナーにあたるデータ構造がいまいち意味不明なので、この辺を参考にさせて頂きましてよ。
  • Excel VBAで配列の長さを取得 - phithonのブログ

    VBAには配列の長さを取得するLengthといったメソッドが存在しない。 そもそも配列にメソッドが存在するのかどうかも怪しい。 配列の長さを直接求める関数も存在しないため、以下の関数を利用する。 LBound 配列の最小インデックスを取得 UBound 配列の最大インデックスを取得 Sub PrintArray() Dim spl() As String spl = Split("a,b,c", ",") ' ["a","b","c"]という配列を生成 Debug.Print UBound(spl) - LBound(spl) + 1 ' 配列の長さを取得したい場合 Dim i As Integer For i = LBound(spl) To UBound(spl) ' 配列の各要素を順に処理したい場合 Debug.Print spl(i) Next End Sub

    Excel VBAで配列の長さを取得 - phithonのブログ
  • 1