On Thursday, 24 October 2019 at 22:40:31 UTC, Jonathan M Davis wrote:
On Thursday, October 24, 2019 7:04:56 AM MDT Paul Backus via Digitalmars-d- learn wrote:
On Thursday, 24 October 2019 at 12:58:11 UTC, lili wrote:
> Hi:
> In Dlang where is strange design. The in expression can > only
>
> use to associative array, why array can not use in > expression.

Checking for the presence of an item in an array requires a linear search. You can do it with std.algorithm.searching.canFind:

https://dlang.org/phobos/std_algorithm_searching.html#.canFind

In particular, the reason that linear search is considered unacceptable for in is so that generic code can rely on its performance. The idea is that types shouldn't implement the in operator unless they can do so with O(log n) or better (O(log n) being what it costs to get to an item in a balanced binary tree like a red-black tree). That way, when you calculate the complexity of any algorithm using in, you can assume that it's O(log n) at worst. Having it be O(n) instead (like it would be for an array) would drastically increase the complexity of the algorithm and make it take much longer when processing a large number of items. And the standard library provides functions like canFind or find for finding elements in an array, so having in work with arrays wouldn't add any functionality. It would basically just change the syntax you'd use for finding an element in an
array.

- Jonathan M Davis

This reason somewhat farfetched, Think about that if this reason is right, the operator overload can not use。 because same operator on different type expression same mean but different implementation and complexity。 so why operator overload can don't care about implementation but 'in' operator need。

Reply via email to