Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Convert a subsequence string to a Slice object.

License

NotificationsYou must be signed in to change notification settings

stdlib-js/slice-seq2slice

About stdlib...

We believe in a future in which the web is a preferred environment for numerical computation. To help realize this future, we've built stdlib. stdlib is a standard library, with an emphasis on numerical and scientific computation, written in JavaScript (and C) for execution in browsers and in Node.js.

The library is fully decomposable, being architected in such a way that you can swap out and mix and match APIs and functionality to cater to your exact preferences and use cases.

When you use stdlib, you can be absolutely certain that you are using the most thorough, rigorous, well-written, studied, documented, tested, measured, and high-quality code out there.

To join us in bringing numerical computing to the web, get started by checking us out onGitHub, and please considerfinancially supporting stdlib. We greatly appreciate your continued support!

seq2slice

NPM versionBuild StatusCoverage Status

Convert a subsequence string to aSlice object.

Installation

npm install @stdlib/slice-seq2slice

Alternatively,

  • To load the package in a website via ascript tag without installation and bundlers, use theES Module available on theesm branch (seeREADME).
  • If you are using Deno, visit thedeno branch (seeREADME for usage intructions).
  • For use in Observable, or in browser/node environments, use theUniversal Module Definition (UMD) build available on theumd branch (seeREADME).

Thebranches.md file summarizes the available branches and displays a diagram illustrating their relationships.

To view installation and usage instructions specific to each branch build, be sure to explicitly navigate to the respective README files on each branch, as linked to above.

Usage

varseq2slice=require('@stdlib/slice-seq2slice');

seq2slice( str, len, strict )

Converts a subsequence string to aSlice object, wherelen specifies the maximum number of elements allowed in the slice.

vars=seq2slice(':5',10,false);// returns <Slice>varv=s.start;// returns 0v=s.stop;// returns 5v=s.step;// returns 1

A subsequence string has the following format:

<start>:<stop>:<increment>

where

  • If anincrement is not specified, the default increment is1. An increment of zero isnot allowed.
  • Thestart index isinclusive.
  • Thestop index isexclusive.
  • Bothstart andstop indices areoptional. If not provided,start andstop default to index extremes. Which extremes correspond to which index depends on whether theincrement is positive or negative.
  • Bothstart andstop can be negative; in which case, the corresponding index is resolved by subtracting the respective value from the provided lengthlen.
  • Bothstart andstop can use theend keyword (e.g.,end-2::2,end-3:, etc), which supports basic subtraction and division.
  • Theend keyword resolves to the provided lengthlen. Thus,:-1 is equivalent to:end-1,:-2 is equivalent to:end-2, and so on and so forth. The exception is when performing a division operation when theincrement is less than zero; in which case,end is equal tolen-1 in order to preserve user expectations whenend/d equals a whole number and slicing from right-to-left. The result from a division operation isrounded down to the nearest integer value.
vars=seq2slice('end:2:-1',10,false);// returns <Slice>varv=s.start;// returns 9v=s.stop;// returns 2v=s.step;// returns -1s=seq2slice('end-2:2:-1',10,false);// returns <Slice>v=s.start;// returns 8v=s.stop;// returns 2v=s.step;// returns -1s=seq2slice('end/2:2:-1',10,false);// returns <Slice>v=s.start;// returns 4v=s.stop;// returns 2v=s.step;// returns -1

Whenstrict istrue, the function throws an error if a subsequence string resolves to a slice exceeding index bounds.

vars=seq2slice('10:20',10,true);// throws <RangeError>

Notes

  • Whenlen is zero, the function always returns a Slice object equivalent to0:0:<increment>.
  • Whenstrict isfalse, the resolved slice start is clamped to the slice index bounds (i.e.,[0, len)).
  • Whenstrict isfalse, the resolved slice end is upper bound clamped tolen (i.e., one greater than the last possible index).
  • When the increment is negative, the resolved slice end value may benull, thus indicating that a non-empty slice should include the first index.
  • The function ensures that results satisfy the convention that:n combined withn: is equivalent to: (i.e., selecting all elements). This convention matches Python slice semantics, but diverges from the MATLAB convention where:n andn: overlap by one element.
  • Unlike MATLAB, but like Python, the subsequence string is upper-bound exclusive. For example, in Python,0:2 corresponds to the sequence{0,1}. In MATLAB,1:3 corresponds to{1,2,3}.

Examples

varseq2slice=require('@stdlib/slice-seq2slice');vars=seq2slice(':',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 0. stop: 5. step: 1.'s=seq2slice('2:',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 2. stop: 5. step: 1.'s=seq2slice(':3',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 0. stop: 3. step: 1.'s=seq2slice('2:4',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 2. stop: 4. step: 1.'s=seq2slice('1:4:2',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 1. stop: 4. step: 2.'s=seq2slice('2::2',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 2. stop: 5. step: 2.'s=seq2slice(':-2',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 0. stop: 3. step: 1.'s=seq2slice(':-1:2',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 0. stop: 4. step: 2.'s=seq2slice('-4:-1:2',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 1. stop: 4. step: 2.'s=seq2slice('-5:-1',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 0. stop: 4. step: 1.'s=seq2slice('::-1',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 4. stop: null. step: -1.'s=seq2slice(':0:-1',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 4. stop: 0. step: -1.'s=seq2slice('3:0:-1',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 3. stop: 0. step: -1.'s=seq2slice('-1:-4:-2',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 4. stop: 1. step: -2.'s=seq2slice(':end',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 0. stop: 5. step: 1.'s=seq2slice(':end-1',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 0. stop: 4. step: 1.'s=seq2slice(':end/2',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 0. stop: 2. step: 1.'s=seq2slice('end/2::-1',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 2. stop: null. step: -1.'s=seq2slice('end-2::-1',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 3. stop: null. step: -1.'s=seq2slice('end/2:',5,false);console.log('start: %s. stop: %s. step: %s.',s.start,s.stop,s.step);// => 'start: 2. stop: 5. step: 1.'

See Also


Notice

This package is part ofstdlib, a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more.

For more information on the project, filing bug reports and feature requests, and guidance on how to developstdlib, see the main projectrepository.

Community

Chat


License

SeeLICENSE.

Copyright

Copyright © 2016-2025. The StdlibAuthors.


[8]ページ先頭

©2009-2025 Movatter.jp