# [swift-evolution] Using "where" to filter an array

Charles Constant charles at charlesism.com
Sun Dec 20 00:10:41 CST 2015

```Hi Jacob,

I take it that's a -1 ?

I don't quite understand your example, because y in a "for" loop is an
Array. So if I modify your example (I'll rename "y" to "numbers")...

for x in numbers where x > 2 { }

...my intuition immediately barks "it's a filter!"

let valid_numbers = x in numbers where x > 2

I realize it's good to have a closure-based solution for map/filter/reduce,
so fair enough that we let the filter method exist. Maybe if I understood
Swift better (is this related to sequences?) this would all make sense...
but with what grasp of Swift I do have, it makes the language feel baroque
to have this "where" clause that looks like it ought to instantiate an
array, but can't.

On Sat, Dec 19, 2015 at 9:45 PM, Jacob Bandes-Storch <jtbandes at gmail.com>
wrote:

> It doesn't bother me, because I read it as an additional constraint on the
> `for` loop rather than an operation being done on the enumerated sequence.
> That is,
>
>     for x in y where x > 2 { }
>
> is fairly consistent with
>
>     if let x = y where x > 2 { }
>
> And you wouldn't expect to be able to do "let x = y where x > 2".
>
> Jacob Bandes-Storch
>
> On Sat, Dec 19, 2015 at 8:22 PM, Charles Constant via swift-evolution <
> swift-evolution at swift.org> wrote:
>
>> Thanks Charles ,
>>
>> I know it's possible to do the same thing with filter. The syntax I drew
>> attention to would be an alternate way.
>>
>> My only rationale is that, if it works in one place, it ought to work
>> everywhere. The redundancy bothers me too, but since the concept exists, we
>> may as well allow it everywhere. Otherwise, it's still redundant in a "for"
>> loop (maybe performance is better, but that could be optimized?), but also
>> inconsistent because it seems intuitively like it ought to create a subset
>> whereas in reality it is illegal.
>>
>> Does it bother anyone else, or am I nitpicking?
>>
>> On Sat, Dec 19, 2015 at 7:52 PM, Charles Srstka <cocoadev at charlessoft.com
>> > wrote:
>>
>>> On Dec 19, 2015, at 9:43 PM, Charles Constant via swift-evolution <
>>> swift-evolution at swift.org> wrote:
>>>
>>>
>>> I noticed several weeks ago that the following is illegal:
>>>
>>>     let new_arr = el in arr where el.is_foo // illegal
>>>
>>> I assumed it would work because it's consistent with the filtering that
>>> exists in a "for" loop, i.e.:
>>>
>>>     for el in arr where el.is_foo // legal
>>>
>>> Is this "new proposal" material? I thought I would check in case it's
>>>
>>>
>>> I believe what you want is already possible via the “filter” method.
>>>
>>> Charles
>>>
>>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151219/d561bc9f/attachment.html>
```