我正在尝试遍历一个数组并为 ruby 中的 true 和 false 值添加第二个维度。
例如。我会将数组推送到另一个数组:
a = [[1,2,3,4],[5]]
我想遍历“a”内的每个数组,并能够为每个单独的值标记 true 或 false 状态。类似于 java 中的 map 。
有什么想法吗?谢谢。
最佳答案
你最好从这个开始:
a = [{ 1 => false, 2 => false, 3 => false, 4 => false }, { 5 => false }]
然后您可以根据需要翻转 bool 值。否则你将不得不用一堆测试来污染你的代码,看看你是否有 Fixnum (1, 2, ...) 或 Hash ({1 => true}
),然后才能测试标志的值。
Ruby 1.9 中的散列是有序的,因此您不会因为切换到散列而丢失顺序。
您可以使用以下方法之一将您的数组转换为这种形式:
a = a.map { |x| Hash[x.zip([false] * x.length)] }
# or
a = a.map { |x| x.each_with_object({}) { |i,h| h[i] = false } }
如果使用 nil
表示“未访问”比以 false
开头更有意义,那么:
a = a.map { |x| Hash[x.zip([nil] * x.length)] }
# or
a = a.map { |x| x.each_with_object({}) { |i,h| h[i] = nil } }
一些有用的引用:
关于具有额外状态的 Ruby 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670428/