Thread overview
Having "in" for arrays
Nov 22, 2017
Fra Mecca
Nov 22, 2017
Jonathan M Davis
Nov 22, 2017
Dukc
Nov 22, 2017
lobo
Nov 22, 2017
Dukc
November 22, 2017
Why doesn't D have a in keyword for arrays?

The docs explains that you can use in only for associative arrays but I don't see the reasons for such decision.


Example code:

void main()
{
	auto v = ["r", "i", "o"];
	assert ("r" in v);
}


That currently fails:
main.d(4): Error: incompatible types for (("r") in (v)): 'string' and 'string[]'

November 22, 2017
On Wednesday, November 22, 2017 08:03:50 Fra Mecca via Digitalmars-d-learn wrote:
> Why doesn't D have a in keyword for arrays?
>
> The docs explains that you can use in only for associative arrays but I don't see the reasons for such decision.
>
>
> Example code:
>
> void main()
> {
>   auto v = ["r", "i", "o"];
>   assert ("r" in v);
> }
>
>
> That currently fails:
> main.d(4): Error: incompatible types for (("r") in (v)): 'string'
> and 'string[]'

in is supposed to be at worst O(log n), whereas to do the operation for an array would be O(n). If you want to search for a specific element in an array than use std.algorithm.find or std.algorithm.canFind.

- Jonathan M Davis

November 22, 2017
On Wednesday, 22 November 2017 at 08:03:50 UTC, Fra Mecca wrote:
> void main()
> {
> 	auto v = ["r", "i", "o"];
> 	assert ("r" in v);
> }

Also note that even if it wereimplemented, you search for 'r' instead of "r". "r" is a string, but you would want to search for a char.


November 22, 2017
On Wednesday, 22 November 2017 at 09:36:43 UTC, Dukc wrote:
> On Wednesday, 22 November 2017 at 08:03:50 UTC, Fra Mecca wrote:
>> void main()
>> {
>> 	auto v = ["r", "i", "o"];
>> 	assert ("r" in v);
>> }
>
> Also note that even if it wereimplemented, you search for 'r' instead of "r". "r" is a string, but you would want to search for a char.

Isn't 'v' an array of strings?  If it were a array of chars, then the search would be 'r'.

bye,
lobo

November 22, 2017
On Wednesday, 22 November 2017 at 10:32:48 UTC, lobo wrote:
> On Wednesday, 22 November 2017 at 09:36:43 UTC, Dukc wrote:
>> On Wednesday, 22 November 2017 at 08:03:50 UTC, Fra Mecca wrote:
>>> void main()
>>> {
>>> 	auto v = ["r", "i", "o"];
>>> 	assert ("r" in v);
>>> }
>>
>> Also note that even if it wereimplemented, you search for 'r' instead of "r". "r" is a string, but you would want to search for a char.
>
> Isn't 'v' an array of strings?  If it were a array of chars, then the search would be 'r'.
>
> bye,
> lobo

Oops, you're correct. My bad.