创建具有固定数量的元素但仍少于固定数量的随机生成的数组

时间:2019-02-05 17:33:53

标签: arrays perl

这里是新手,正如标题所述,我正在尝试生成一个必须包含随机数(包括负数)但不超过19的数组。 我想到了这个:

use strict;
use warnings;
use feature qw/say/;

my @rand=();

my $all_the_numbers=int(rand(19));

my $i=0;

while ($all_the_numbers<20)
{
    my $number=20-int(rand(30));  #in order to randomize negative numbers too
    push @rand, $number;
    $i++;
    last if $i=$all_the_numbers;
}
say "@rand";

但是我总是最终得到一个只有一个元素的数组。知道为什么吗?

更新

首先,感谢您帮助我解决了上一个问题。 现在,我试图删除数组中的每个正数,使其仅包含负数;整个程序如下所示:

#!/usr/bin/perl
use strict;
use warnings;
use feature qw/say/;
use 5.10.1;

my @rand=();

my $all_the_numbers=int(rand(19));

my $i=0;

while ($all_the_numbers<20)
{
 my $number=20-int(rand(30));
 push @rand, $number;
 $i++;
 last if $i==$all_the_numbers;
}
say "@rand";

my $h=0;

while ($all_the_numbers<20)
{
 for (@rand)
 {
 if ($rand[0]<0)
  {
   next;  #in order to make it skip the negative ones
  }
   shift @rand;
 }
 $h++;
 last if $h==$all_the_numbers;
}
say "@rand";

但是,这只能删除数组中第一个负数之前的正数,而保留不变后的结果... 那么,while循环如何不继续删除肯定值呢? 这是一张可以更好地说明自己的照片:https://i.stack.imgur.com/qi7sf.png 预先感谢。

1 个答案:

答案 0 :(得分:1)

尝试一下:

[
  { state: 'CA', county: '2', item: 0.019 },
  { item: 0.037 },
  { state: 'MN', county: '1', item: 0.297 },
  ...
]

观察操作员 last if $i==$all_the_numbers;

您可能已经知道,但是为了其他可能访问的读者的利益:

  • 运算符==比较是否相等。
  • 运算符== 将其右侧的值分配给左侧的变量。