- - PR -
[VB.NET] 指定の数値群より近似値を求める方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-12 13:33
と、すいませんVB.NETでしたね。
| ||||||||
|
投稿日時: 2006-05-12 13:38
おっと、インスタンスメンバでしたね。。。 Array.Sort(n) | ||||||||
|
投稿日時: 2006-05-12 13:54
みなさん、たくさんのご意見ありがとうございます。
色々と大変参考になりました。 一応、投稿後に自分で作成したものは下記のようなものです。 究極超人さんの意見に近いのかな・・・? "Dim tmp As Integer = 20"初回に比較する内容がないために 仮に20以上の差が出ないことを前提と考えてやってみました。 最終的にはこの条件は省いてしまいたいと思ってます。 "SizeList"はArrayListを使って生成しました。 ------------------------------------------------------------------------------- GetBestSize(size As Integer) As Integer Dim dif As Integer Dim tmp As Integer = 20 Dim ret As Integer If IsNothing(Sizelist) Then Return size End If If Sizelist.Contains(size) Then Return size End If For Each BaseSize As Integer In m_FontSizelist dif = Math.Abs(size - BaseSize) If tmp > dif Then tmp = dif ret = BaseSize End If Next Return ret -------------------------------------------------------------------------------- BinarySearchについては仕様をあまり理解していなかったので、これを期に勉強してみようと思います。 ありがとうございました。 | ||||||||
|
投稿日時: 2006-05-12 14:44
僕のことでしょうか?w ソートされているならバイナリサーチが速いとは思ったのですが、そういう前提条件 がないなら、一旦ソートしてバイナリサーチするより、直接舐めちゃった方が速い筈 です。 #ソートメソッドが中で何をやっているのか知りませんが | ||||||||
|
投稿日時: 2006-05-12 15:22
KIMERAさんのコードでは、差分が同値の場合に比較値(ここでは数値群)の大小が
考慮されていないので ソートされていることが前提条件になると思いますよ? 例えば、 数値群{10, 12, 6}で 8を指定した場合、戻り値は10 になりませんか? #修正 0への距離が考慮されてないので -> 差分が同値の場合に比較値(ここでは数値群)の大小が [ メッセージ編集済み 編集者: うにくま 編集日時 2006-05-12 15:48 ] | ||||||||
|
投稿日時: 2006-05-12 15:42
0への距離の意味が良くわかませんでした( ̄ ̄?)
戻り値は、10になると思います。 しかし、ソートされていることが前提である理由にはならないように思います。 すみません。結構悩んでみたんですが。 | ||||||||
|
投稿日時: 2006-05-12 15:52
以下が条件なので、
先ほどの例では、6が期待する結果になると思います。 [ メッセージ編集済み 編集者: うにくま 編集日時 2006-05-12 15:56 ] | ||||||||
|
投稿日時: 2006-05-12 16:13
http://msdn2.microsoft.com/ja-JP/library/6tf1f0bc.aspx
だそうです。 |