我在算法和数据结构方面有一些背景知识。我也花了一些时间用面向对象和程序方式编写程序(使用C,C ++,Java等),但是对我来说,功能性的思维方式对我来说是一个新的东西。
几乎每个程序都使用经典数据结构,如Array(固体内存块),List(内存块,通过指针连接),Set(基于哈希表或树状结构),Map(基于a哈希表或树状结构)。
我认为纯功能环境在这6种经典数据结构中只有3种类型:List,Set(基于树),Map(基于树)。我知道,一些函数式语言实际上有可变数组,甚至可能是Set和Map(基于哈希表),但我说的是纯函数式方法。
好吧,可能是缺乏基于散列的Set / Map不是很明显,但是如果没有我那个老式的可变阵列,我感到非常不舒服。考虑一个例子:假设我有一对((1,3)(2,2)(1,4)(2,1)(0,9)...)列表,其中每对是(knapsack_number,weight_of_item) - 基本上每个这样的一对都与一个项目相关联,项目必须特别是背包(所有背包都被列举)并且它有一些重量。基于此我想得到一对对象列表((0,27)(1,33)(2,18)...) - 每对都是(knapsack_number,total_weight_of_items_in_that_knapsack)。
如果我能够使用可变数组,我可以很容易地迭代我的传入列表一次,并因此非常有效地得到一对数组。 但是我在纯粹的功能环境中没有可变数组。那么,我能想出什么是最好的解决方案呢? (到目前为止,我想到的最好的事情是通过使用0,1,2,...作为键来模拟使用不可变映射的数组,当我在纯函数环境中需要数组时,这是什么方式?)< / p>