Re: [問題] 為csv輸出特定格式
※ 引述《itucson (愛吐桑)》之銘言:
: 我有一筆csv檔案如下
: 1,0,1,0,1,0,0,0
: -1,0,1,0,0,1,0,0
: 1,0,1,1,0,0,0,0
: 想要輸出的格式是這樣
: label index1:value1 index2:value2 ...
: 所以要出輸這樣子
: 1 1:0 2:1 3:0 4:1 5:0 6:0 7:0
: -1 1:0 2:1 3:0 4:0 5:1 6:0 7:0
: 已經想了一個晚上了,無奈資質駑鈍,實在沒輒 ><
here's one-liner... for ruby 1.8.7 and later
s = <<-CSV
1,0,1,0,1,0,0,0
-1,0,1,0,0,1,0,0
1,0,1,1,0,0,0,0
CSV
require 'csv'
puts CSV.parse(s).map{ |x|
[ x[0], *x[1..-1].each.with_index.map{ |y, i| "#{i+1}:#{y}"} ].
join(' ')
}.join("\n")
# =>
1 1:0 2:1 3:0 4:1 5:0 6:0 7:0
-1 1:0 2:1 3:0 4:0 5:1 6:0 7:0
1 1:0 2:1 3:1 4:0 5:0 6:0 7:0
解說...
想辦法把 [1,0,1,0,1,0,0,0] 變成 [1, '1:0', '2:1', '3:0', ...]
所以 [ x[0], ... ] 第一個放第一個元素,後面用 splat 展開
他是去掉第一個元素的 mapping, 所以用 x[1..-1] 砍掉頭
先用 .each 把 array 變成 Enumerator, 接著就能夠用 .with_index 取得 index.
再 map, y 就會是原本的元素,而 i 就會是 index.
你要的 index 從 1 開始算,所以 map 成 "#{i+1}:#{y}"
到這裡就成功變出 [1, '1:0', '2:1', '3:0', ...]
接著用空白 join 起來,最後全部用 newline join 起來,就是結果了
--
「行け!Loki!」(rocky ロッキー)
-Gurumin ぐるみん 王子? XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.28.18
推
10/23 22:13, , 1F
10/23 22:13, 1F
→
10/23 22:13, , 2F
10/23 22:13, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章