Proposal: Ranges with stepping #2562
Replies: 23 comments
-
I quite like the idea of an optional stepping parameter, however, I am wondering how this could be implemented. IIRC, a range is currently only a span slice - meaning that the underlying data will not be copied. This requires the underlying data to be located in continuous block. Steps, however, will introduce "holes" in this continuous data alignment - requiring the data to be copied when using the step-parameter. |
Beta Was this translation helpful? Give feedback.
-
A range is its own datatype. |
Beta Was this translation helpful? Give feedback.
-
Range is a range, it does not dictate how applying it on a collection works. Applying it on a |
Beta Was this translation helpful? Give feedback.
-
See my comments here #2510, although the whole issue is a bit bloated with emotions it has a lot in common |
Beta Was this translation helpful? Give feedback.
-
The python grammar is more concise than this one |
Beta Was this translation helpful? Give feedback.
-
Seems a sensible addition to ranges to me. At the risk of bike shedding, the only criticism I have of it is the odd syntax of |
Beta Was this translation helpful? Give feedback.
-
@DavidArno this may conflict with 2d-array in C# |
Beta Was this translation helpful? Give feedback.
-
Ah, I think you are right. Oh well, in that case, |
Beta Was this translation helpful? Give feedback.
-
@DavidArno this seems to be similar syntax to what MATLAB has, but yes, I find it confusing too. It's not intuitive if you have not seen it before, unlike most of the language. Moreover, it contradicts the Could we not do better? |
Beta Was this translation helpful? Give feedback.
-
You may not like 2D arrays, but I'm sure a lot of other people do.
A language feature isn't going to get removed just because you don't like
it...
…On Wed, 29 May 2019 at 13:39, fawdlstty ***@***.***> wrote:
maybe remove 2d-array and use pythonic grammar is better.i dont't like
2d-array because it cannot be used for linq
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<https:/dotnet/csharplang/issues/2562?email_source=notifications&email_token=ADIEDQISJN7MDFPWKDZ7ANDPXZ2QBA5CNFSM4HP2DQG2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWPGB6A#issuecomment-496918776>,
or mute the thread
<https:/notifications/unsubscribe-auth/ADIEDQPI4QAUQS7VIHIATMTPXZ2QBANCNFSM4HP2DQGQ>
.
|
Beta Was this translation helpful? Give feedback.
-
Whatever the syntax would be it would have to be independent of indexer syntax, so anything that depends on being surrounded with |
Beta Was this translation helpful? Give feedback.
-
Just an idea ... [ start ; end ; step ] // similar to `for ( start ; end ; step ) ..` .. or maybe .. [ start .. end ; step ] |
Beta Was this translation helpful? Give feedback.
-
@MillKaDe In this case, the visual difference between rectangular array access and step is as tiny as the difference between If we want an alternate syntax, I'd go for |
Beta Was this translation helpful? Give feedback.
-
I don't want to sound repetitive, but the MATLAB syntax has the most generic indexing, considering the suggested syntaxes here. I think it really would make sense to take a deeper look here: https://www.mathworks.com/help/matlab/math/array-indexing.html For the fast readers:
and many more... As stated above that this is useful for machine learning, it's also useful for image processing for a lot of cases (resampling, feature selection, etc) or data analysis in general. In image processing two dimensions are essential, although we always put the images in one dimensional arrays. When it comes to 3D it gets even harder, you need a 3D indexer/range. For time dependent 3D volumes you even need more. The MATLAB syntax might look complex and it is, because it allows a lot. But for simple cases it is as easy as Range but without the odd I could think of leaving the range as it is and add another "indexer" like structure that allows more cases.
|
Beta Was this translation helpful? Give feedback.
-
I agree the I like the @MillKaDe idea that matches The possibility of arbitrary list of indices does not really sound like a "range". |
Beta Was this translation helpful? Give feedback.
-
True. Compared to MATLAB everything is a vector or matrix (an array of elements) so that this is a natural feature of MATLAB. In the end, I don't really care so much about how the structures are named, I'm sure Microsoft will find a suitable name for it ;-) For me just the behavior counts ;-) |
Beta Was this translation helpful? Give feedback.
-
The |
Beta Was this translation helpful? Give feedback.
-
@HaloFour oh that's what you meant, I see. Yeah, that's not going to work, unless If there is no syntactical start or end for the range, then sadly I don't see much ways how step could be anywhere but in the middle. Perhaps something like |
Beta Was this translation helpful? Give feedback.
-
F# Is an example of language with this syntax, and IMO it is intuitive, https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/sequences |
Beta Was this translation helpful? Give feedback.
-
Step could rather be a method, similar to |
Beta Was this translation helpful? Give feedback.
-
I'm sticking with Python syntax. We wanted this feature to be an expression and compact so: |
Beta Was this translation helpful? Give feedback.
-
I have 2 points to make
|
Beta Was this translation helpful? Give feedback.
-
this is unrelated to the language (and hence |
Beta Was this translation helpful? Give feedback.
-
In C# 8.0, the Ranges feature (#185 ) allows us to write
arr[1..5]
,arr[1..]
,arr[..3]
,arr[2..^2]
and etc.I propose to add a step filed which allow us to control the stepping while slicing:
Proposed syntax:
step
is optional, and bothstart
andend
are optional if step exists.For example:
This is especially useful in machine learning, such as operations as below:
Beta Was this translation helpful? Give feedback.
All reactions