我有這樣的代碼:如何從'。'分離數字?
def a = [".15", "7..", "402", "..3"]
c = a.permutations() as List
println c[0].join()
其輸出7....3402.15
。在這一個中,我只需要獲得數字,即7,3402,15
。更值得注意的是,我需要這些錢,即在我們的例子中,我們會得到7,9,6
。
這可以在groovy中完成嗎?
我有這樣的代碼:如何從'。'分離數字?
def a = [".15", "7..", "402", "..3"]
c = a.permutations() as List
println c[0].join()
其輸出7....3402.15
。在這一個中,我只需要獲得數字,即7,3402,15
。更值得注意的是,我需要這些錢,即在我們的例子中,我們會得到7,9,6
。
這可以在groovy中完成嗎?
作爲一個快速反應,一個解決辦法是:
def result = [".15", "7..", "402", "..3"].permutations()*.
join()*. // Join each permutation together into a single string
split('\\.')*. // Split each of these Strings on the '.' char
findAll()*. // Remove empty elements (where we had '..' before splitting)
collect { it -> it*.toInteger().sum() } // Convert each String to List<Integer> and sum
這看起來很類:) – 2012-02-13 00:25:09
是這樣的嗎? 這不是很漂亮的代碼,但它應該傳達的意圖......
[".15", "7..", "402", "..3"].permutations()*.join()*.replaceAll('\\.\\.*',',')*.split(',')*.collect{it.getChars().inject(0){a,b->a+ (new Integer(b as String))}}
編輯:更改代碼,以便它適用於排列全陣列,而不僅僅是一個元素。類型轉換笨重,@tim_yates代碼更清晰。
代碼工作如下:
用於置換的每個子陣列:
.
與一種,
,
inject
方法現在,我不知道這是否是你所需要的,因爲我不知道原來的問題。
+1你的想法很好。但是你能解釋一下,你在做什麼? – 2012-02-12 10:26:12
這是功課? – 2012-02-12 09:45:22
@AshBurlaczenko:哈哈..不完全..它是我的疑問。我正在解決頂級編碼器中的一個難題。而且你至少給我一個線索,說明我該如何做到這一點。將代碼:) – 2012-02-12 09:48:04
@AshBurlaczenko:我可以遍歷它並放入列表中,直到找到一個'.'並加上它。但我想這種情況會有一些更好的解決方案;) – 2012-02-12 09:51:13