分配给数组并替换出现的 nil 值

发布于 2024-08-27 06:57:52 字数 277 浏览 6 评论 0原文

问候!

当如下所示为数组赋值时,如何用 0 替换 nil

array = [1,2,3]
array[10] = 2
array # => [1, 2, 3, nil, nil, nil, nil, nil, nil, nil, 2]

如果在分配时不可能,那么之后我该怎么做才是最好的?我想到了 array.map { |e| e.nil? ? 0 : e },但是……

谢谢!

Greetings!

When assigning a value to an array as in the following, how could I replace the nils by 0?

array = [1,2,3]
array[10] = 2
array # => [1, 2, 3, nil, nil, nil, nil, nil, nil, nil, 2]

If not possible when assigning, how would I do it the best way afterwards? I thought of array.map { |e| e.nil? ? 0 : e }, but well…

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

一片旧的回忆 2024-09-03 06:57:52

要在分配后更改数组:

array.map! { |x| x || 0 }

请注意,这也会将 false 转换为 0

如果你想在赋值期间使用零,那就有点混乱了:

i = 10
a = [1, 2, 3]
a += ([0] * (i - a.size)) << 2
# => [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 2]

To change the array after assignment:

array.map! { |x| x || 0 }

Note that this also converts false to 0.

If you want to use zeros during assignment, it's a little messy:

i = 10
a = [1, 2, 3]
a += ([0] * (i - a.size)) << 2
# => [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 2]
暖心男生 2024-09-03 06:57:52

没有内置函数可以替换数组中的 nil ,所以,是的,map 是正确的选择。如果较短的版本会让您更快乐,您可以这样做:

array.map {|e| e ? e : 0}

There is no built-in function to replace nil in an array, so yes, map is the way to go. If a shorter version would make you happier, you could do:

array.map {|e| e ? e : 0}
晨敛清荷 2024-09-03 06:57:52

nil.to_i 是 0,如果所有数字都是整数,那么下面应该可以工作。我认为这也是这里最短的答案。

array.map!(&:to_i)

nil.to_i is 0, if all the numbers are integers then below should work. I think It is also the shortest answer here.

array.map!(&:to_i)
二智少女 2024-09-03 06:57:52

就地更改数组

array.map!{|x|x ?x:0}

如果数组可以包含 false,则需要使用它

array.map!{|x|x.nil? ? 0:x}

To change the array in place

array.map!{|x|x ?x:0}

If the array can contain false you'll need to use this instead

array.map!{|x|x.nil? ? 0:x}
高速公鹿 2024-09-03 06:57:52
a.select { |i| i }

这个答案太短了,所以我再补充几句话。

a.select { |i| i }

This answer is too short so I am adding a few more words.

空城仅有旧梦在 2024-09-03 06:57:52

另一种方法是定义您自己的函数来向数组添加值。

class Array
  def addpad(index,newval)
    concat(Array.new(index-size,0)) if index > size
    self[index] = newval
  end
end

a = [1,2,3]
a.addpad(10,2)
a => [1,2,3,0,0,0,0,0,0,0,2]

Another approach would be to define your own function for adding a value to the array.

class Array
  def addpad(index,newval)
    concat(Array.new(index-size,0)) if index > size
    self[index] = newval
  end
end

a = [1,2,3]
a.addpad(10,2)
a => [1,2,3,0,0,0,0,0,0,0,2]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文