Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 嵌套循环Smalltalk_Loops_Nested_Smalltalk_Pharo - Fatal编程技术网

Loops 嵌套循环Smalltalk

Loops 嵌套循环Smalltalk,loops,nested,smalltalk,pharo,Loops,Nested,Smalltalk,Pharo,我是Smalltalk的新手,在我全面研究了主题之后,我以为我已经准备好开始我的项目了,但当我开始时,我刚开始做嵌套for循环时就被绊倒了。我确实搜索了这个ISSUE,但互联网上的示例并不满足我的需要,因为它们很简单,我只想得到循环的索引来使用它们。 也许这个话题会对我和即将到来的新手有所帮助,所以代表我和他们感谢你们:) 我不知道这是不是很容易找到或可行,但我试着去做 1 to: 25 do: [[:a |1 to: 80 do: [:b | a , b printString ,' '],

我是Smalltalk的新手,在我全面研究了主题之后,我以为我已经准备好开始我的项目了,但当我开始时,我刚开始做嵌套for循环时就被绊倒了。我确实搜索了这个ISSUE,但互联网上的示例并不满足我的需要,因为它们很简单,我只想得到循环的索引来使用它们。 也许这个话题会对我和即将到来的新手有所帮助,所以代表我和他们感谢你们:)

我不知道这是不是很容易找到或可行,但我试着去做

1 to: 25 do: [[:a |1 to: 80 do: [:b |  a , b printString ,' '],cr]].
我只想将这些数字连接为

11 12 13 14 ..180
21 22 23 ...
.
.
251 252 ... 2580 
将它们用作索引或指针,然后将其存储在字典中。 但是我不能做嵌套循环,至少不能用print来写它们


如果您想知道,我使用Pharo 3.0。

我不确定是否有比转换为字符串更好的方法。但是,如果您想走这条路,请尝试在工作区中打印或检查:

((1 to: 25) collect: [ :a | (1 to: 80) collect: [ :b | a printString , b printString ]]) flattened.
使用
do:aBlock
可以为接收器中的每个元素计算aBlock,但是使用
collect:a锁定
在新集合中收集每个块计算的结果


根据您打算执行的操作,您可能必须将结果字符串转换回数字。

我不确定是否有比转换为字符串更好的方法。但是,如果您想走这条路,请尝试在工作区中打印或检查:

((1 to: 25) collect: [ :a | (1 to: 80) collect: [ :b | a printString , b printString ]]) flattened.
使用
do:aBlock
可以为接收器中的每个元素计算aBlock,但是使用
collect:a锁定
在新集合中收集每个块计算的结果

根据您打算执行的操作,您可能必须将结果字符串转换回数字。

您的代码工作正常(除了缺少
#printString
a
的消息和块的错误嵌套),但正如@MartinW所说,您没有使用块的返回值。您可以做的是(尽可能多地保留当前代码)(我喜欢以更明确的方式编写代码):

您的代码工作正常(除了
#printString
a
的消息丢失和块的嵌套错误),但正如@MartinW所说,您没有使用块的返回值。您可以做的是(尽可能多地保留当前代码)(我喜欢以更明确的方式编写代码):


从嵌套循环中累积到单个集合的一种尖刻/法式方法是使用中间流,如以下代码段:

String streamContents: [:aStream |
    1 to: 25 do: [:a |
        1 to: 80 do: [:b |
            aStream
                print: a;
                print: b;
                space]]].
或者,如果要创建数字数组:

Array new: 25*80 streamContents: [:aStream |
    1 to: 25 do: [:a |
        1 to: 80 do: [:b |
            aStream nextPut: (a printString , b printString) asNumber]]].

从嵌套循环中累积到单个集合的一种尖刻/法式方法是使用中间流,如以下代码段:

String streamContents: [:aStream |
    1 to: 25 do: [:a |
        1 to: 80 do: [:b |
            aStream
                print: a;
                print: b;
                space]]].
或者,如果要创建数字数组:

Array new: 25*80 streamContents: [:aStream |
    1 to: 25 do: [:a |
        1 to: 80 do: [:b |
            aStream nextPut: (a printString , b printString) asNumber]]].

谢谢你的成绩单开放部分也帮了我很多:)谢谢你的成绩单开放部分也帮了我很多:)谢谢你指出差异too@MartinW使用流并不特别容易,但是消息streamContents:和new:streamContents:是在Squeak中引入的。至少,它们不存在于st80/Visualworks中。我不知道它是否已经在大众或其他Smalltalk的最新版本中引入了…@MartinW使用流并不特别尖刻,但消息streamContents:和new:streamContents:是在Squeak中引入的。至少,它们不存在于st80/Visualworks中。我不知道它是否已经在大众的最新版本或其他Smalltalk风格中引入。。。