使用Enumerable.collect
下面是一個例子:
x = [1,2,4,5,6]
=> [1,2,4,5,6]
x.collect { |i| "#{i}" }
= > ["1","2","4","5","6"]
,或者,如果你想將它們連接成一個字符串:
x.collect { |i| "#{i}" }.join(', ')
,或者,如果你輸入的是一個CSV字符串:
x.split(",").collect { |i| "#{i}" }.join(', ')
編輯:
這裏是一個我想你想要做的事情的例子。
require 'sqlite3'
db = SQLite3::Database.new("test.db")
db.execute("create table bobby (pID varchar2(50), Data varchar(100))")
db.execute("select * from bobby")
db.execute("insert into bobby values (? , ?)", "1649,1650,1651", "Some Data1")
db.execute("insert into bobby values (? , ?)", "1643,3", "Some Data2")
db.execute("insert into bobby values (? , ?)", "23,4,5,6,7", "Some Data3")
db.execute("select * from bobby").each do |row|
p
end
# outputs [["1649,1650,1651", "Some Data1"], ["1643,3", "Some Data2"], ["23,4,5,6,7", "Some Data3"]]
db.results_as_hash = true #allows hashing row via column name
puts "Each ID as array of strings"
db.execute("select * from bobby").each do |row|
p row['pID'].split(",").collect { |i| "#{i}" }
end
puts "Each ID as single string"
db.execute("select * from bobby").each do |row|
p row['pID'].split(",").collect { |i| "#{i}" }.join(", ")
end
這裏是輸出:
C:\Users\Jim\Desktop>ruby sqlLiteExample.rb
Each ID as array of strings
["1649", "1650", "1651"]
["1643", "3"]
["23", "4", "5", "6", "7"]
Each ID as single string
"1649, 1650, 1651"
"1643, 3"
"23, 4, 5, 6, 7"
EDIT2: 如果你想你的價值觀是一個字符串,例如 「」 1643" , 「3」」那麼你會必須做到以下幾點:
x.map{|i| '"' + "#{i}" + '"' }.join(',')
# outputs "\"124\",\"5525\",\"23525\""
我錯過了他的ids初始存儲爲csv字符串。 – 2010-07-30 00:26:53
如果我把它放在我的代碼中,我得到「rubyql.rb:12:私人方法'分裂'調用[」prideID「]:SQLite3 :: ResultSet :: ArrayWithTypesAndFields(NoMethodError)」「。任何想法爲什麼? 謝謝! – Bobby 2010-07-30 00:28:41
我還沒有用過SQLite。嘗試寫i.first或i.fields。 – 2010-07-30 00:45:27