我想从给定长度的值中创建一个列表。
例如,给定列表[0 1]
并且所需列表长度为7,输出将为[0 1 0 1 0 1 0]
。长度由population
定义,由滑块定义。我声明了应该遍历列表的变量x
。如果列表的长度短于population
的值,则应再次设置为0
。
我用循环命令尝试了它,但它无限运行:
let x 0
loop[
if length exp-dif-li <= population[
ifelse x < length exp-dif-li[
set x 0]
[ set exp-dif-li lput item x exp-dif-li exp-dif-li
set x x + 1]
]
]
]
答案 0 :(得分:5)
class Properties
{
var x:Int = 1
var y:Int = 1
}
var myJson : [String:Int] = ["data":10]
var originalProperties = Properties()
// ...
/* Same results as for Example 1:
'originalProperties.x = 10' and 'Missing parameter' */
示例用途:
dput(testtable)
structure(list(Week = c("09/07/15", "09/07/15", "08/31/15"),
Income = c(2000L, 460L, 304L), Views = c(345L, 11980L, 678L
), Partner = c("Bob", "Jane", "Mark")), .Names = c("Week",
"Income", "Views", "Partner"), class = "data.frame", row.names = c(NA,
-3L))
week <- c(seq(as.Date("2015/07/15"), by = "day",
length.out = 7),seq(as.Date("2015/07/15"), by = "day",
length.out = 7), seq(as.Date("2015/08/15"),
by = "day", length.out = 7))
df <- cbind(week,testtable[rep(seq_len(nrow(testtable)), each=7),2:ncol(testtable)])
df
week Income Views Partner
1 2015-07-15 2000 345 Bob
2 2015-07-16 2000 345 Bob
3 2015-07-17 2000 345 Bob
4 2015-07-18 2000 345 Bob
5 2015-07-19 2000 345 Bob
6 2015-07-20 2000 345 Bob
7 2015-07-21 2000 345 Bob
8 2015-07-15 460 11980 Jane
9 2015-07-16 460 11980 Jane
10 2015-07-17 460 11980 Jane
11 2015-07-18 460 11980 Jane
12 2015-07-19 460 11980 Jane
13 2015-07-20 460 11980 Jane
14 2015-07-21 460 11980 Jane
15 2015-08-15 304 678 Mark
16 2015-08-16 304 678 Mark
17 2015-08-17 304 678 Mark
18 2015-08-18 304 678 Mark
19 2015-08-19 304 678 Mark
20 2015-08-20 304 678 Mark
21 2015-08-21 304 678 Mark
编辑:意识到谈论为什么会这样有用会很好! to-report continue-list [ lst n ]
report n-values n [ item (? mod length lst) lst ]
end
通过将号码observer> show continue-list [0 1] 7
observer: [0 1 0 1 0 1 0]
observer> show continue-list [0 1] 1
observer: [0]
observer> show continue-list [0 1 2 3 4] 22
observer: [0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1]
通过n-values n [ ... ]
发送给给定的记者来创建长度为n
的列表。报告者使用0
访问该号码(这是NetLogo task语法)。所以我们想继续重复原始列表中的项目。重复循环数字的一个非常好的功能是n - 1
。通常,新列表的项?
应为项mod
。因此,将i
放在一起,可以根据需要重复列表i mod <length of original list>
中的项目,从而创建一个新的n-values n [ item (? mod length lst) lst ]
列表。
答案 1 :(得分:1)
要退出循环,您需要调用结束或停止。
插入行
if length exp-dif-li = 7 [stop]
正确的地方会这样做。循环很容易变成无限循环和冻结,因此最好避免使用。
我更喜欢while循环。它们更安全,更不容易出现无限循环,看起来像这样
while length exp-dif-li < 7
[
if length exp-dif-li <= population[
ifelse x < length exp-dif-li[
set x 0]
[ set exp-dif-li lput item x exp-dif-li exp-dif-li
set x x + 1]
]
Netlogo有另一种方法,我在其他地方没见过,并且对无限循环非常强大。 [重复]在你的情况下的用法似乎是
repeat 7 [
if length exp-dif-li <= population[
ifelse x < length exp-dif-li[set x 0]
[ set exp-dif-li lput item x exp-dif-li exp-dif-li
set x x + 1]
]