Dynamic programming comes to mind.

Saagar Jha

> On Apr 16, 2017, at 19:33, Riley Testut <rileytes...@gmail.com> wrote:
> 
> My bad, should have phrased my response better :^)
> 
> Under what circumstances would you need to be able to assign elements in an 
> array out of order, while also requiring Array size/performance? (Genuinely 
> curious, not trying to attack).
> 
> IMO, if the differences between Array and Dictionary would cause that much of 
> an issue for your implementation, my guess is you have more important 
> priorities than the need to assign elements out-of-order 😉 I don't think we'd 
> need to add another type to the standard library for this use case.
> 
> On Apr 16, 2017, at 11:22 AM, Saagar Jha <saa...@saagarjha.com 
> <mailto:saa...@saagarjha.com>> wrote:
> 
>> A Dictionary uses a lot more space than an Array, though, and allow for 
>> bogus keys like “-1”, etc.
>> 
>> Saagar Jha
>> 
>>> On Apr 16, 2017, at 10:34, Riley Testut via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>>> Personally, the only valid use-case I can think of is when you want to 
>>>> initialise an Array’s elements out-of-order - i.e., you want to set a 
>>>> value for myArray[2] despite myArray[0] and [1] not being populated. In 
>>>> that case, it would be better to have some kind of SparseArray type, and 
>>>> for us to have a proper API for unsafe initialisation of stdlib types. 
>>> 
>>> Wouldn't the same functionality be accomplished by a Dictionary with Int as 
>>> the key type?
>>> 
>>> On Apr 14, 2017, at 10:00 AM, Karl Wagner via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>>>> I'd actually say the #1 reason not to add this feature is that a lot of 
>>>>> developers don't seem to understand this, and they're likely to use the 
>>>>> feature to make their code try to continue in the face of programmer 
>>>>> error instead of trapping like it properly should. A program in an 
>>>>> inconsistent state is dangerous; best to stop it quickly before it does 
>>>>> some damage.)
>>>> 
>>>> Right, so I think the reason is actually that a lot of developers don’t 
>>>> understand what an Array is. There are two use-cases for an Array:
>>>> 
>>>> 1) As a string of items, don’t care about the length. The maximum prior 
>>>> knowledge you can have is that the order may or may not be significant. 
>>>> This includes operations like iteration, mapping, reducing and filtering.
>>>> 2) As a string of items of specific length. You have prior knowledge about 
>>>> what you expect to find at each location. This includes operations like 
>>>> random-access subscripting, which is what we’re talking about.
>>>> 
>>>> Basically, the interesting part of a statement such as “let someValue = 
>>>> myArray[2]” is: why index 2? What’s so special about that element; why 
>>>> couldn't someValue be the item at any index N instead? It’s because we 
>>>> know to expect something of special significance at index 2.
>>>> 
>>>> In that case, the only time myArray[2] will fail is when your prior 
>>>> knowledge breaks down. The type-system has no way to encode and check for 
>>>> the length of an Array, and that has allowed somebody to pass in a bad 
>>>> value. So what to do?
>>>> 
>>>> A) If you absolutely require a value for myArray[2]: Insert a precondition 
>>>> check.
>>>> B) If you can still continue without myArray[2]: Check the length of the 
>>>> Array. Your logic will be branching anyway in this case, to account for 
>>>> the value (and subsequent values) being/not being present.
>>>> 
>>>> 
>>>> Personally, the only valid use-case I can think of is when you want to 
>>>> initialise an Array’s elements out-of-order - i.e., you want to set a 
>>>> value for myArray[2] despite myArray[0] and [1] not being populated. In 
>>>> that case, it would be better to have some kind of SparseArray type, and 
>>>> for us to have a proper API for unsafe initialisation of stdlib types. 
>>>> 
>>>> - Karl
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to