簡體   English   中英

將字符串轉換為整數列表

[英]Convert string to list of integers

這是輸入字符串: 1,1,1,1,1,1,1,1,1,1,-9\n1,1,1,1,1,1,1,1,1,1,1\n2,1,2,1,2,1,2,1,2,1,2\n1,0,1,0,1,0\n3,1,2,-2,1,-2

我需要將此字符串轉換為整數列表,因此 output 應該是: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -9], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2], [1, 0, 1, 0, 1, 0], [3, 1, 2, -2, 1, -2]]

我的解決方案是:

text.split("\n").map do |row|
    row.split(",").map(&:to_i)
end

有沒有更好、更有效的方法?

重構為單行

我經常發現,當人們說“更高效”或“更優雅”時,它們只是意味着更短更緊湊。 您的代碼沒有任何問題,除非您對數以萬計的 arrays 執行操作,否則我懷疑效率不僅僅是過早的優化。 也就是說,如果你願意,你可以為此寫一個單行。

例如,使用 Ruby 2.7.1 和str作為輸入字符串:

str.split.map { _1.split(?,).map &:to_i }
#=> [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -9], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2], [1, 0, 1, 0, 1, 0], [3, 1, 2, -2, 1, -2]]

如果你用 Kernel#pp 漂亮地打印結果,你會得到你期望的結果。

 [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -9], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2], [1, 0, 1, 0, 1, 0], [3, 1, 2, -2, 1, -2]]

這並不比您現有的代碼在任何有意義的方面更好,我什至不會聲稱它更快。 我只能說它更緊湊,使用的行數更少,所以請自行判斷它的可讀性和實用價值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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