有人可以在perl中建议一个可以用来存储对象集合的好模块吗?

或ARRAY是否足以替代大多数需求?

<强>更新 我正在寻找一个集合类,因为我希望能够从每个元素执行类似计算集合级别属性的操作。

由于我需要执行许多这样的操作,我不妨编写一个可以由单个对象扩展的类。这个类显然可以用于数组(或者可能是哈希)。

有帮助吗?

解决方案

有更复杂结构的集合模块,但在Perl中使用数组,堆栈和列表的数组是常见的。 Perl内置了将数组用作堆栈或列表的函数:push / pop,shift / unshift,splice(在中间插入或删除)和foreach表单用于迭代。

Perl还有一个名为hashmap的映射,它相当于Python中的Dictionary,允许您在单个键和单个值之间建立关联。

Perl开发人员经常组合这两个数据结构来构建他们需要的东西 - 需要多个值?将数组引用存储在哈希表(Map)的值部分中。树可以以类似的方式构建 - 如果您需要唯一键,使用多级哈希映射,或者如果您不使用嵌套数组引用。

Perl中的这两个原始集合类型没有面向对象的api,但它们仍然是集合。

如果您查看CPAN,您可能会发现提供其他面向对象数据结构的模块,这实际上取决于您的需求。除列表,堆栈或映射外,是否还需要特定的数据结构?如果您询问特定的数据结构,可能会得到更精确的答案(例如特定模块)。

忘记提及,如果您正在寻找各种语言的小代码示例,请 PLEAC (编程语言示例Alike Cookbook)是一个不错的资源。

其他提示

我会提到Michael Carman的评论:请不要使用术语“Hashmap”。或“地图”当你的意思是哈希或关联数组。特别是当Perl具有map功能时;这只会让事情变得混乱。

话虽如此,Kyle Burton的反应基本上是合理的:无论是散列还是数组,或者由两者混合组成的复杂结构通常都足够了。 Perl groo OO,但没有强制执行;可能是松散定义的数据结构可能足以满足您的需求。

如果不这样做,请更准确地定义“每个元素的计算集合级别属性”的含义。请记住,Perl有像map和grep这样的关键字,可以让你进行类似的功能编程。

my $record = get_complex_structure();
# $record = {
#    'widgets' => {
#        name => 'ACME Widgets',
#        skus => [ 'WIDG01', 'WIDG02', 'WIDG03' ],
#        sales => {
#            WIDG01 => { num => 25, value => 105.24 },
#            WIDG02 => { num => 10, value => 80.02 },
#            WIDG03 => { num => 8,  value => 205.80 },
#        },
#    },
#    ### and so on for 'grommets', 'nuts', 'bolts' etc.
# }

my @standouts =
    map { 

我会提到Michael Carman的评论:请不要使用术语“Hashmap”。或“地图”当你的意思是哈希或关联数组。特别是当Perl具有map功能时;这只会让事情变得混乱。

话虽如此,Kyle Burton的反应基本上是合理的:无论是散列还是数组,或者由两者混合组成的复杂结构通常都足够了。 Perl groo OO,但没有强制执行;可能是松散定义的数据结构可能足以满足您的需求。

如果不这样做,请更准确地定义“每个元素的计算集合级别属性”的含义。请记住,Perl有像map和grep这样的关键字,可以让你进行类似的功能编程。

<*>

从后到前阅读,这个特殊的 Schwarztian变换做了三件事:

3)它需要一个$ record记录的密钥,遍历在这个任意结构中定义的SKU,并计算出事务的总数和总值。它返回一个包含密钥,事务数和总值的匿名数组。

2)下一个块接受一些arrayrefs并对它们进行排序a)首先通过数字比较降序来计算总值; b)如果值相等,则通过比较交易数量,按数字降序排列; c)如果失败,则通过asciibetically排序与该订单相关的名称。

1)最后,我们从有序数据结构中获取$ record的记录,然后返回。

很可能你不需要设置一个单独的类来做你想做的事。

->[0] } sort { $b->[2] <=> $a->[2] || $b->[1] <=> $a->[1] || $record->{$a->[0]}->{name} cmp $record->{$b->[0]}->{name} } map { my ($num, $value); for my $sku (@{$record->{

我会提到Michael Carman的评论:请不要使用术语“Hashmap”。或“地图”当你的意思是哈希或关联数组。特别是当Perl具有map功能时;这只会让事情变得混乱。

话虽如此,Kyle Burton的反应基本上是合理的:无论是散列还是数组,或者由两者混合组成的复杂结构通常都足够了。 Perl groo OO,但没有强制执行;可能是松散定义的数据结构可能足以满足您的需求。

如果不这样做,请更准确地定义“每个元素的计算集合级别属性”的含义。请记住,Perl有像map和grep这样的关键字,可以让你进行类似的功能编程。

<*>

从后到前阅读,这个特殊的 Schwarztian变换做了三件事:

3)它需要一个$ record记录的密钥,遍历在这个任意结构中定义的SKU,并计算出事务的总数和总值。它返回一个包含密钥,事务数和总值的匿名数组。

2)下一个块接受一些arrayrefs并对它们进行排序a)首先通过数字比较降序来计算总值; b)如果值相等,则通过比较交易数量,按数字降序排列; c)如果失败,则通过asciibetically排序与该订单相关的名称。

1)最后,我们从有序数据结构中获取$ record的记录,然后返回。

很可能你不需要设置一个单独的类来做你想做的事。

}{skus}}) { $num += $record->{

我会提到Michael Carman的评论:请不要使用术语“Hashmap”。或“地图”当你的意思是哈希或关联数组。特别是当Perl具有map功能时;这只会让事情变得混乱。

话虽如此,Kyle Burton的反应基本上是合理的:无论是散列还是数组,或者由两者混合组成的复杂结构通常都足够了。 Perl groo OO,但没有强制执行;可能是松散定义的数据结构可能足以满足您的需求。

如果不这样做,请更准确地定义“每个元素的计算集合级别属性”的含义。请记住,Perl有像map和grep这样的关键字,可以让你进行类似的功能编程。

<*>

从后到前阅读,这个特殊的 Schwarztian变换做了三件事:

3)它需要一个$ record记录的密钥,遍历在这个任意结构中定义的SKU,并计算出事务的总数和总值。它返回一个包含密钥,事务数和总值的匿名数组。

2)下一个块接受一些arrayrefs并对它们进行排序a)首先通过数字比较降序来计算总值; b)如果值相等,则通过比较交易数量,按数字降序排列; c)如果失败,则通过asciibetically排序与该订单相关的名称。

1)最后,我们从有序数据结构中获取$ record的记录,然后返回。

很可能你不需要设置一个单独的类来做你想做的事。

}{sales}{$sku}{num}; $value += $record->{

我会提到Michael Carman的评论:请不要使用术语“Hashmap”。或“地图”当你的意思是哈希或关联数组。特别是当Perl具有map功能时;这只会让事情变得混乱。

话虽如此,Kyle Burton的反应基本上是合理的:无论是散列还是数组,或者由两者混合组成的复杂结构通常都足够了。 Perl groo OO,但没有强制执行;可能是松散定义的数据结构可能足以满足您的需求。

如果不这样做,请更准确地定义“每个元素的计算集合级别属性”的含义。请记住,Perl有像map和grep这样的关键字,可以让你进行类似的功能编程。

<*>

从后到前阅读,这个特殊的 Schwarztian变换做了三件事:

3)它需要一个$ record记录的密钥,遍历在这个任意结构中定义的SKU,并计算出事务的总数和总值。它返回一个包含密钥,事务数和总值的匿名数组。

2)下一个块接受一些arrayrefs并对它们进行排序a)首先通过数字比较降序来计算总值; b)如果值相等,则通过比较交易数量,按数字降序排列; c)如果失败,则通过asciibetically排序与该订单相关的名称。

1)最后,我们从有序数据结构中获取$ record的记录,然后返回。

很可能你不需要设置一个单独的类来做你想做的事。

}{sales}{$sku}{value}; } [

我会提到Michael Carman的评论:请不要使用术语“Hashmap”。或“地图”当你的意思是哈希或关联数组。特别是当Perl具有map功能时;这只会让事情变得混乱。

话虽如此,Kyle Burton的反应基本上是合理的:无论是散列还是数组,或者由两者混合组成的复杂结构通常都足够了。 Perl groo OO,但没有强制执行;可能是松散定义的数据结构可能足以满足您的需求。

如果不这样做,请更准确地定义“每个元素的计算集合级别属性”的含义。请记住,Perl有像map和grep这样的关键字,可以让你进行类似的功能编程。

<*>

从后到前阅读,这个特殊的 Schwarztian变换做了三件事:

3)它需要一个$ record记录的密钥,遍历在这个任意结构中定义的SKU,并计算出事务的总数和总值。它返回一个包含密钥,事务数和总值的匿名数组。

2)下一个块接受一些arrayrefs并对它们进行排序a)首先通过数字比较降序来计算总值; b)如果值相等,则通过比较交易数量,按数字降序排列; c)如果失败,则通过asciibetically排序与该订单相关的名称。

1)最后,我们从有序数据结构中获取$ record的记录,然后返回。

很可能你不需要设置一个单独的类来做你想做的事。

, $num, $value ]; } keys %$record;

从后到前阅读,这个特殊的 Schwarztian变换做了三件事:

3)它需要一个$ record记录的密钥,遍历在这个任意结构中定义的SKU,并计算出事务的总数和总值。它返回一个包含密钥,事务数和总值的匿名数组。

2)下一个块接受一些arrayrefs并对它们进行排序a)首先通过数字比较降序来计算总值; b)如果值相等,则通过比较交易数量,按数字降序排列; c)如果失败,则通过asciibetically排序与该订单相关的名称。

1)最后,我们从有序数据结构中获取$ record的记录,然后返回。

很可能你不需要设置一个单独的类来做你想做的事。

我通常会使用@array或%hash。

您正在寻找哪些功能不是由那些人提供的?

根据您需要访问对象的方式做出决定。如果将它们推入数组,索引,弹出/移动它们就可以了,然后使用数组。否则,通过某些键对它们进行哈希处理,或将它们组织成满足您需求的对象树。对象哈希是一种非常简单,强大且高度优化的Perl处理方式。

由于Perl数组可以很容易地附加,调整大小,排序等,因此它们足以满足大多数“收集”的需要。需要。如果您需要更高级的东西,通常会使用散列。我不建议您在实际需要之前寻找收集模块。

数组或散列可以存储对象集合。如果你想以某种方式与班级合作,一堂课可能会更好,但在我们提出任何好的建议之前你必须告诉我们这些方法是什么。

我会坚持使用ARRAY或HASH。

 @names = ('Paul','Michael','Jessica','Megan');

my %petsounds = ("cat" => "meow",
             "dog" => "woof",
             "snake" => "hiss");

来源

这取决于很多;有稀疏矩阵模块,某些形式的 persistence OO的新风格等 大多数人只是 perldata perllol perldsc to用数据结构回答他们的具体问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top