gpt4 book ai didi

ruby - 为什么 each_slice with block 和 .map 返回 nil

转载 作者:数据小太阳 更新时间:2023-10-29 07:27:03 24 4
gpt4 key购买 nike

为什么返回 nil,第 2 行是什么意思?该数组代表我正在尝试为其创建解决方案的数独谜题的行。

我正在 irb 中尝试不同的方法,看看有多少种不同的方式可以查看数组。

array = ['015003002000100906270068430490002017501040380003905000900081040860070025037204600']
array.each_slice(9) { |e| puts e.map }
#<Enumerator:0x0000010288a470>
=> nil

最佳答案

有些方法需要一个 block ,如果没有提供 block ,它们将返回 Enumerable

在您的示例中,您在未提供任何 block 的情况下调用了 map

但是您可以在枚举器上调用可枚举方法。这允许您更改迭代器的行为。

array[0].split('').each_slice(9).map { |el| el }

=> [["0", "1", "5", "0", "0", "3", "0", "0", "2"],
["0", "0", "0", "1", "0", "0", "9", "0", "6"],
["2", "7", "0", "0", "6", "8", "4", "3", "0"],
["4", "9", "0", "0", "0", "2", "0", "1", "7"],
["5", "0", "1", "0", "4", "0", "3", "8", "0"],
["0", "0", "3", "9", "0", "5", "0", "0", "0"],
["9", "0", "0", "0", "8", "1", "0", "4", "0"],
["8", "6", "0", "0", "7", "0", "0", "2", "5"],
["0", "3", "7", "2", "0", "4", "6", "0", "0"]]

这是 Ruby 中稍微高级的主题之一,但是互联网上有很多资源,f.i. http://www.sitepoint.com/guide-ruby-collections-iii-enumerable-enumerator/

编辑:

只是回答评论中的问题:array 中只有一个长字符串。我不问为什么,只是举个例子,我需要实际的(字符串?)数字数组。 array[0] 获取数组中的第一个元素(一长串数字)。当我有一个字符串时,我可以调用 String#split 来获得类似 `["0", "1", "5", "..."] 的数组。

Array 包含 Enumerable 模块,因此您可以在其上调用 each_slice 等方法。正如文档所述( http://rubydoc.info/stdlib/core/Enumerable:each_slice ):

If no block is given, returns an enumerator

因此在调用 each_slice(9) 之后,我得到了 Enumerator 实例 ( http://rubydoc.info/stdlib/core/Enumerator )。它有一些自己的方法,但也包括 Enumerable 模块(具有 mapeach_slice 等方法。这就是乐趣的开始。如果我调用任何在我们的枚举器上的那些方法中(如 map),它不会像正常情况那样接收数组的每个元素,但每个元素都由枚举器“返回”,即现在每个元素都是数组9 个元素。

一如既往,我强烈推荐 Well Grounded Rubyist,其中对此类主题进行了详尽的解释。 http://www.manning.com/black2/

关于ruby - 为什么 each_slice with block 和 .map 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21416838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com