jstewmc/interval

两个端点之间的数字集合

v1.0.0 2016-08-13 22:46 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:26 UTC


README

两个端点之间的数字集合。

use Jstewmc\Interval;

// create an interval between 2 (exclusive) and 4 (inclusive)
$interval = new Interval('(2, 4]');

// compare values
$interval->compare(1);  // returns -1
$interval->compare(2);  // returns -1
$interval->compare(3);  // returns 0
$interval->compare(4);  // returns 0
$interval->compare(5);  // returns 1

// echo the interval
echo $interval;  // returns "(2, 4]"

语法

此库支持标准美国区间语法,要求(按顺序)

  • 一个开括号([)或开括号(();
  • 一个数字,正无穷(INF)或负无穷(-INF);
  • 一个逗号空格(, );
  • 一个数字,正无穷(INF)或负无穷(-INF);并且,
  • 一个闭括号(])或闭括号())。

接受正负浮点数、整数和无穷大。

例如

  • (2, 4] 表示 2 < x <= 4
  • (-10.5, 10.5) 表示 -10.5 < x < 10.5
  • [0, INF) 表示 0 <= x < ∞
  • (-INF, INF) 表示 -∞ < x < ∞

请注意,此库不支持 反向括号 语法(例如,]2, 4])或 分号分隔 语法(例如,[2; 4])。

使用方法

您可以从字符串创建一个区间实例或手动使用集合方法创建它

use Jstewmc\Interval;

$a = new Interval('(2, 4]');

$b = (new Interval())
    ->setLowerExclusive()
    ->setLower(2)
    ->setUpper(4)
    ->setUpperInclusive();

$a == $b;  // returns true

请注意,当从字符串创建区间实例时,如果区间的语法无效,将抛出 InvalidArgumentException

use Jstewmc\Interval;

new Interval('[0; 0]');      // throws exception (semicolon syntax not supported)
new Interval(']0, 2]');      // throws exception (reverse brackets not supported)
new Interval('[foo, bar]');  // throws exception (use numbers or INF)
new Interval('[0, 0)');      // throws exception (same endpoint, different boundary)
new Interval('[1, -1]');     // throws exception (upper- is less than lower-bound)

支持无穷大作为字符串 'INF'INF 预定义常量

use Jstewmc\Interval;

$a = new Interval('(-INF, 0]');

$b = (new Interval())
    ->setLowerExclusive()
    ->setLower(-INF)
    ->setUpper(0)
    ->setUpperInclusive(true);

$a == $b;  // returns true

您可以使用 compare() 方法将值与区间进行比较。如果值在区间下方、内部或上方,则 compare() 方法将返回 -101

use Jstewmc\Interval;

$interval = new Interval('(2, 4]');

$interval->compare(1);  // returns -1
$interval->compare(2);  // returns -1
$interval->compare(3);  // returns 0
$interval->compare(4);  // returns 0
$interval->compare(5);  // returns 1

您可以使用获取方法获取区间的任何设置

use Jstewmc\Interval;

$interval = new Interval('(2, 4]');

$interval->getIsLowerInclusive();  // returns false
$interval->getLower();             // returns 2
$interval->getUpper();             // returns 4
$interval->getIsUpperInclusive();  // returns true

有一些方便的方法可以轻松获取和设置边界

use Jstewmc\Interval;

$interval = new Interval('(2, 4]');

$interval->isLowerInclusive();  // returns false
$interval->isLowerExclusive();  // returns true
$interval->isUpperInclusive();  // returns true
$interval->isUpperExclusive();  // returns false

echo $interval->setLowerInclusive();  // prints "[2, 4]"
echo $interval->setLowerExclusive();  // prints "(2, 4]"
echo $interval->setUpperInclusive();  // prints "(2, 4]"
echo $interval->setUpperExclusive();  // prints "(2, 4)"

就这些了!

许可证

MIT

作者

Jack Clayton

版本

1.0.0,2016年8月13日

  • 主要版本
  • 更新 composer.json

0.2.0,2016年8月7日

  • 添加对无穷大的支持(例如,'(-INF, 0]')。
  • 更新错误信息,使其更具信息性。
  • 更新 README 示例。

0.1.0,2016年8月6日

  • 首次发布