• ベストアンサー

配列の操作について

配列に [100,200,200,100,50] というデータが入っていた場合, 3という結果を取得したいのですが, ※3とは配列より,100,200,50の個数 また,配列のデータは毎回設定が変更されます。 配列に [100,300,300,100,100] →2 このような場合,どのようにしたら良いのでしょうか? VBというよりはアルゴリズムの問題かもしれませんが, よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 自分のフリーソフトの中で同じことをやった記憶があったので、その部分をコピーして貼り付けようかと思ったのですが、自分の記憶以上に複雑でした(^_^;(2次元配列での重複要素除外アルゴリズムだったので) 1.配列自身をソートして昇順または降順のどちらかに並べ替える 2.配列の先頭から順に精査し、要素の数だけカウントアップする 3.ただし、1つ前の配列と同じ値を持つ要素はカウントアップしない  こういうアルゴリズムでいけると思います。  過去に作った経験者ですので、もし何か分からないことがあればもう少し詳しい説明も可能かと思います。

-cinq-
質問者

お礼

早速の回答ありがとうございます。 上記の方法で実行できました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

頭の体操でやってみました。ちょっと長いかな・・・ Dim A As String A = "100,200,300,200" Dim B() As String B = Split(A, ",") 'ここから本番 Dim i As Integer Dim j As Integer Dim k As Integer Dim F As Boolean Dim C(10) As String k = 0 For i = 0 To UBound(B) F = False For j = 0 To k If C(j) = B(i) Then F = True Next j If F = False Then C(k) = B(i) k = k + 1 End If Next i MsgBox k

-cinq-
質問者

お礼

回答ありがとうございます。 上記の部分を参考にさせて頂きました。

すると、全ての回答が全文表示されます。

関連するQ&A