![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
ハッシュを拡張し、値をキーで指定した範囲内から取得したいと思っているのですが、ハッシュと同じように作成できないのでしょうか?
試行錯誤してみたのですが、記述が分かりません・・・。
class Range_List < Hash
#
# 範囲に対応する、値を取得(速度が気になりますが・・・)
#
def [](other)
@list.each { |range, value|
return value if range === other
}
nil
end
end
# 角度 (0..1) に対応する、十キーのリストを作成
angle_to_direction = Range_List{ # => エラー。このような記述で呼び出したい
0.0625..0.1875 => 3,
0.1875..0.3125 => 2,
0.3125..0.4375 => 1,
0.4375..0.5625 => 4,
0.5625..0.6875 => 7,
0.6875..0.8125 => 8,
0.8125..0.9375 => 9,
0.9375..1 => 6,
0..0.0625 => 6
}
# 角度対応の十キーを求める
p angle_to_direction[0.1] # => 3
どうかご回答お願いいたします。
No.2ベストアンサー
- 回答日時:
No1です。
テストはしていませんが、class Range_List < Hash
def initialize(hash)
@list=hash
end
def [](other)
@list.each { |range, value|
return value if range === other
}
nil
end
end
def Range_List(hash)
Range_List.new(hash)
end
で、
angle_to_direction = Range_List( a..b=>c, d..e=>f, g..h=>i, ~~)
引き続きご回答ありがとうございます。
上記の通りにやってみたところ、出来ました!!
やはり、Kernelに定義するのですね。
引数が、自動的にHashに格納されるとは・・・意外でした。
お陰様でまた一歩前進できそうです。
毎回ご回答下さり、本当にありがとうございます。
No.1
- 回答日時:
Range_List { xxx..yyy => zzz, ~~~ } のような呼び出し方はできないです。
Range_List( { xxx..yyy => zzz, ~~~ } ) か Range_List ( xxx..yyy => zzz, ~~~ ) か。
Range_Listメソッドはどのように定義していますか?
あと、Range_List#initialize はどのように定義していますか?
この回答への補足
早速のご回答ありがとうございます。
>> Range_List { xxx..yyy => zzz, ~~~ } のような呼び出し方はできないです。
>> Range_List( { xxx..yyy => zzz, ~~~ } ) か Range_List ( xxx..yyy => zzz, ~~~ ) か。
やはりできませんでしたか・・・。
僕としては、Range_List({})と二回括弧を書くよりは、Range_List()で呼び出せればと思っています。
>> あと、Range_List#initialize はどのように定義していますか?
当初はHashを継承しなくても、下記のように呼び出せると思っており、エラーが出てそう甘くないと痛感していたところです。
Hashを継承するにあたり、現在はメソッドが被らないように全てコメントにしています。
class Range_List
#
# オブジェクト作成
#
def self.{}(list) # エラーが出た為、Hashを継承させる方法を模索・・・
new(list)
end
#
# オブジェクト初期化
#
def initialize(list)
@list = list
end
end
まだまだRubyの深い部分を知らず、記述がイマイチ分かりません・・・。
どうか引き続きご回答の程お願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あせんうぶり言語
-
(再質問)エクセルのマクロボ...
-
前回の質問の続き
-
Accessで文字列のバイト数読み込み
-
実行時エラー450:引数の数が一...
-
Ruby on railsをrails sで立ち...
-
教えてください
-
初心者プログラミング
-
100万件越えCSVから条件を満た...
-
ビーリアルのユーザー名を変え...
-
1、Rstudioで回帰直線を求める...
-
Beautiful Soupのインストール...
-
英数字を含む文字列(0-9,A-Z)...
-
Atomの補完機能
-
これらは書誌情報だと思うので...
-
情報の表現。()内がどうしても...
-
pythonのerrorコード
-
三項でたとえば交換って
-
WinSCPで画像のように puttyを...
-
パソコンのスクリーンセーバー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テンプレートの特殊化でコンパ...
-
What class are you in? には何...
-
変数の隠蔽とは?
-
class roomとclassroom どちら...
-
構造体を使ったプログラム
-
HSTLやSSTL等のI/Oピン
-
クラス名やモジュール名の競合...
-
プログラミングRubyについての...
-
インスタンス内から自分のクラ...
-
演算子の再定義とインスタンス...
-
c言語のプログラムでこの実行結...
-
[LWP?] 特定のCLASSの値だけ取...
-
Ruby ハッシュ継承クラス、作成...
-
2つのクラスがお互いのポイン...
-
pythonのerrorコード
-
classのdelete
-
二項演算子の定義
-
railsのform_forの使い方
-
No route matches [GET] "/post...
-
下線部の答え教えてください こ...
おすすめ情報