簡體   English   中英

將Ruby數組字符串轉換為整數數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM