[解決済み] Rubyで「逆レンジ」を繰り返し処理できないのはなぜですか?
2022-08-20 12:55:51
質問
レンジを使用して逆方向の反復処理を行おうとしたところ
each
:
(4..0).each do |i|
puts i
end
==> 4..0
イテレーションスルー
0..4
が数字を書き込む。もう一方のRangeでは
r = 4..0
は大丈夫なようです。
r.first == 4
,
r.last == 0
.
上記の構成が期待される結果をもたらさないのは、私には不思議に思われます。その理由は何でしょうか?この動作が妥当なのはどのような場合でしょうか?
どのように解決するのですか?
範囲とは、その内容ではなく、開始と終了によって定義されるものです。範囲に対する "Iterating" は、一般的なケースでは本当に意味がありません。例えば、2つの日付が作り出す範囲に対してどのように「反復処理」を行うかを考えてみてください。日単位、月単位、年単位、週単位で反復するのでしょうか?定義が不明確なのです。IMOは、それが前方の範囲に対して許可されているという事実は、便利な方法としてのみ見なされるべきです。
そのような範囲に対して後方反復を行いたい場合は、常に
downto
:
$ r = 10..6
=> 10..6
$ (r.first).downto(r.last).each { |i| puts i }
10
9
8
7
6
以下は もう少し考えてみましょう。 は、反復を許可し、一貫して逆レンジを処理することが困難である理由について、他の人たちからの考えを述べました。
関連
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み] Rubyに「do ... while」ループはあるのか?
-
[解決済み] range()でリストを逆順に表示する?
-
[解決済み】Rubyで配列を反復処理するための「正しい」方法は何ですか?
-
[解決済み】整数の範囲内で反復処理する方法はありますか?
-
[解決済み] ...』の違い (ダブルドット) と '...' の違い?(トリプルドット)の違いについて教えてください。
-
[解決済み] rvm use 2.0.0 --default を実行すると、"Warning! PATH is not properly set up" と表示される。
-
[解決済み] Rubyでbeginとendのブロックを使わずにrescueを使うには?
-
[解決済み] 文字列を正規表現に変換する ruby
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ...』の違い (ダブルドット) と '...' の違い?(トリプルドット)の違いについて教えてください。
-
[解決済み] Gemfileでrubygemを指定するときの~>と>=の違いは何ですか?
-
[解決済み] Hash each ループでインデックスにアクセスすることは可能ですか?
-
[解決済み] JSONファイルへの正しい書式での書き込み方法
-
[解決済み] Rubyで空のファイルを作成する:"touch "と同等?
-
[解決済み] ハッシュの配列をハッシュの値でソートするにはどうしたらいいですか?
-
[解決済み] このタスクを実行するには、Ruby と Sass をインストールし、PATH に配置する必要があります」という警告を解決するには?
-
[解決済み] Ruby: 文字列の最初の文字を取得する方法
-
[解決済み] Rubyでjavaのインターフェースに相当するものは何ですか?
-
[解決済み] Ruby: selfを拡張する