2017-05-08 37 views
-2

我triying由元素名稱在序列上concantenate此表中的序列組的元素:如何使用特定的柱

6x3+3+1;2x1+1+1;srgb(255,170,170) 
1x8+1+2;2x1+1+1;srgb(255,170,170) 
1x1+1+0;2x1+1+1;srgb(255,170,170) 
6x3+3+1;1x2+8+4;srgb(255,170,170) 
1x2+7+5;1x2+8+4;srgb(255,170,170) 
4x4+6+8;1x2+6+6;srgb(255,170,170) 
3x1+3+6;1x2+6+6;srgb(255,170,170) 
1x2+7+5;1x2+6+6;srgb(255,170,170) 
1x1+1+0;1x1+0+0;srgb(255,170,170) 
1x8+1+2;1x1+2+6;srgb(255,170,170) 
3x1+3+6;1x1+2+6;srgb(255,170,170) 
1x8+1+2;1x1+1+10;srgb(255,170,170) 
1x1+1+11;1x1+1+10;srgb(255,170,170) 
1x1+1+11;1x1+0+11;srgb(255,170,170) 
1x1+1+11;1x1+2+11;srgb(255,170,170) 
4x4+6+8;1x1+10+11;srgb(255,170,170) 

我用這個命令:

ruby -a -F';' -ne ' sum= {};sum[$F[1]] ||= "" ; sum[$F[1]] = $F[0] + sum[$F[1]]; puts sum[$F[1]]  ' ZmGHmmzb 

並獲得:

6x3+3+1 
1x8+1+2 
1x1+1+0 
6x3+3+1 
1x2+7+5 
4x4+6+8 
3x1+3+6 
1x2+7+5 
1x1+1+0 
1x8+1+2 
3x1+3+6 
1x8+1+2 
1x1+1+11 
1x1+1+11 
1x1+1+11 
4x4+6+8 

但我預計:

6x3+3+1 1x8+1+2 1x1+1+0 
6x3+3+1 1x2+7+5 
4x4+6+8 3x1+3+6 1x2+7+5 
1x1+1+0 
1x8+1+2 3x1+3+6 
1x8+1+2 1x1+1+11 
1x1+1+11 1x1+1+11 4x4+6+8 

我的命令不是基於列2連接字符串。爲什麼?

+3

你應該發佈一個完整的Ruby程序,而不是一個簡單的代碼片段。沒有人會花時間來試圖弄清楚你的單線程做什麼。 –

+0

我使用線索以節省時間編寫代碼 – zzero

+2

請請。 **停止使用單線**。這不會節省任何時間,因爲我看到你一次又一次地帶着與他們有關的問題來到這裏,如果你花了五分鐘的時間把它放到一個正確組織的Ruby文件中,錯誤會更明顯,因此更容易修復。這段代碼是一個噩夢。這是一個噩夢來幫助你。沒有理由這樣做。 – tadman

回答

1

這應該讓你開始:

data = DATA.readlines.map { |l| l.split(';')[0, 2] } 

data.group_by { |l| l[1] }.values.map { |a| a.map(&:first) } 
# => [["6x3+3+1", "1x8+1+2", "1x1+1+0"], 
#  ["6x3+3+1", "1x2+7+5"], 
#  ["4x4+6+8", "3x1+3+6", "1x2+7+5"], 
#  ["1x1+1+0"], 
#  ["1x8+1+2", "3x1+3+6"], 
#  ["1x8+1+2", "1x1+1+11"], 
#  ["1x1+1+11"], 
#  ["1x1+1+11"], 
#  ["4x4+6+8"]] 

__END__ 
6x3+3+1;2x1+1+1;srgb(255,170,170) 
1x8+1+2;2x1+1+1;srgb(255,170,170) 
1x1+1+0;2x1+1+1;srgb(255,170,170) 
6x3+3+1;1x2+8+4;srgb(255,170,170) 
1x2+7+5;1x2+8+4;srgb(255,170,170) 
4x4+6+8;1x2+6+6;srgb(255,170,170) 
3x1+3+6;1x2+6+6;srgb(255,170,170) 
1x2+7+5;1x2+6+6;srgb(255,170,170) 
1x1+1+0;1x1+0+0;srgb(255,170,170) 
1x8+1+2;1x1+2+6;srgb(255,170,170) 
3x1+3+6;1x1+2+6;srgb(255,170,170) 
1x8+1+2;1x1+1+10;srgb(255,170,170) 
1x1+1+11;1x1+1+10;srgb(255,170,170) 
1x1+1+11;1x1+0+11;srgb(255,170,170) 
1x1+1+11;1x1+2+11;srgb(255,170,170) 
4x4+6+8;1x1+10+11;srgb(255,170,170) 

繁重由group_by完成。顯然還有其他方法可以做到這一點,但是當您想要「按某個值分組數據」時,group_by非常合適。您需要了解如何以您想要的形式輸出數據。

+0

非常感謝您幫助我解決這個問題 – zzero

+1

在嘗試將代碼轉換爲「單行代碼」之前,以正常形式繪製代碼非常重要。單行命令行不是很有用,因爲Ruby可以輕鬆地將腳本作爲流水線的一部分。你可以在一個普通的腳本中完成非常複雜的任務,但仍然把它稱爲一系列命令的一部分。閱讀關於ARGF和OptionParser的信息。 –