[英]Making a Ruby array string into an array of integers
我有一個ID號數組(從技術上來說是一個字符串)。
ids = "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
我想將id變成一個看起來像這樣的數組:
ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
我發現做到這一點的唯一方法是使用地圖。
id_numbers = ids.split(/,\s?/).map(&:to_i)
但是,這會丟失數組中的第一個數字,並將其替換為0。
id_numbers = [0, 2, 3, 4, 5, 6, 7, 8, 9, 10]
是否有更好的方法將字符串數組轉換為常規數組?
由於這實際上是JSON格式,因此答案很簡單:
require 'json'
id_json = "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
ids = JSON.load(id_json)
您的解決方案“失敗”第一個數字的原因是因為您拆分的方式。 您系列中的第一個“數字”實際上是"[1"
,對於Ruby來說,它不是數字,因此默認情況下會轉換為0。
如果您不想使用JSON
,
ids.scan(/\d+/).map(&:to_i)
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果ids
可能包含負整數的字符串表示形式,請將正則表達式更改為/-?\\d+/
。
總結一下:由於字符串開頭為非數字字符,因此將0
作為數組中的第一個元素:
p '[1'.to_i #=> 0
也許有更好的方法來接收原始字符串。 如果沒有其他方法可以接收該字符串,則可以簡單地擺脫第一個字符,您自己的解決方案將起作用:
ids = "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11]"
p ids[1..-1].split(",").map(&:to_i)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11]
@tadman和@CarySwoveland的解決方案工作得很好。 或者:
ids = "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11]"
p ids.tr("^-0-9", ' ').split.map(&:to_i)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11]
請記住, &:
最早出現在Ruby 1.8.7中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.