You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中delete_if方法的工作原理及特定代码执行结果疑问

嘿,我来帮你把这两个Ruby问题讲明白~

1. Ruby中delete_if方法的工作原理

delete_if是Ruby数组的内置迭代方法,核心逻辑直白易懂:

  • 它会遍历数组中的每一个元素,把每个元素传入你定义的块(也就是{ ... }里的代码);
  • 块会返回一个布尔值(true/false),如果返回true,对应的元素就会被从数组里删除;
  • 注意,它是直接修改原数组的原地操作,同时也会返回修改后的数组本身。

举个简单例子帮你理解:

nums = [1, 2, 3, 4, 5]
nums.delete_if { |num| num.odd? } # 删除所有奇数元素
p nums # 输出 => [2, 4]
2. 为什么数组中的'a'被delete_if删除了?

咱们逐行拆解你的代码逻辑:

x = [1, 2, 3, 'a', 9.5]
x.delete_if{ |elem| elem.to_i <= 3}
p x # 输出 => [9.5]

问题出在to_i方法对不同类型元素的处理规则上:

  • 对于数字(整数/浮点数):to_i会把它们转换成整数,比如9.5.to_i得到9,3.to_i还是3;
  • 对于字符串:如果字符串开头不是有效数字,to_i会直接返回0。你的字符串是'a',所以'a'.to_i的结果是0,而0显然满足<=3的条件,因此'a'被判定为需要删除的元素。

咱们逐个核对数组元素的判定结果:

  • 1.to_i → 1 ≤3 → 被删除
  • 2.to_i →2 ≤3 → 被删除
  • 3.to_i →3 ≤3 → 被删除
  • 'a'.to_i →0 ≤3 → 被删除
  • 9.5.to_i →9 >3 → 保留

所以最后数组里就只剩下9.5啦。

内容的提问来源于stack exchange,提问作者danxo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:22:38