LoginSignup
12
3

More than 5 years have passed since last update.

n..mやrange(n, m)など範囲型やrangeと呼ばれるものでmは含まれるかどうかを調べてみた

Last updated at Posted at 2017-07-12

この記事のコメント欄でn..mでmを含むかどうか、みたいな話になったので、調べてまとめてみました。開区間、閉区間や[n, m), [n, m]で表されるものです。

普段使わない言語も含まれるため、誤りがあればご指摘をお願いします。

前提

n, mはオーバーフローしない範囲の自然数あるいは0でn<mとする。

様々な言語での結果

Rust

n .. m // mは含まれない

Rustの記事からの派生なのでとりあえずRustを。mは含まれません。

Python

range(n, m)

mは含みません。ただし、random.randint(n, m)はmを含むみたいなややこしさがあります。

Java

IntStreamクラスにRange関数とRangeClosed関数があります。

JavaScript(ES2016以降), 0始まりのみ

...Array(m).keys()

ちょっと特殊な例ですが、mは含まれません。

Ruby

n..m # 含む
n...m # 含まない

しょしんしゃが最初に習うの点2個の方が多いイメージ

Elixir

n..m # 含む

Elixirの範囲型はmを含みます。Rubyによく似ています。

PHP

range(n, m)

mを含みます

Kotlin

n..m

mを含みます。

Swift

n...m // 含む
n..<m // 含まない

Scala

Range(n, m, 1) // [n, m), 間隔1
n to m // mを含む
n until m // mを含まない

まとめ

似たような言語でも扱いが違って非常にややこしいです。

私が知っている言語を主に書いたので、偏りや抜けなどあるかもしれません。

追記:どちらが主流というのはあまり意味のない分類でしたので撤廃しました。

12
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3