2011-04-01 54 views
2

有沒有更直接的方法來做到這一點?查看所有元素是否都不是零的最短路徑是什麼?

[1, nil, 2, 'a'].all? {|x| x} 
+0

哇,我會說這是相當直接! – steinar 2011-04-01 23:48:43

+0

簡短而高效,即使它不是非常詳細。不會做得比這更好。 – 2011-04-01 23:48:58

+2

你的'全部? {| X | x}用'[1,false,'fish',:bicycle]做的方法''? – 2011-04-02 00:45:46

回答

5

另一種可能性是any?none?方法,以及使用該方法nil?

irb(main):005:0> [1, nil, 2, 'a'].any?(&:nil?) 
=> true 
irb(main):006:0> [1, nil, 2, 'a'].none?(&:nil?) 
=> false 

&:foo語法工作,以取代類似的東西:list.each() {|x| x.foo()}

+1

不錯,這些排隊與丹的意圖,並確切地說,你的意思是一個很好的政策。 – 2011-04-02 00:04:11

+0

@mu太短了,呵呵,我喜歡你的'.include?'方法的直接性。在這個特定的情況下,領先的'!'可能很容易被忽略,但是有了一個變量,它應該足夠突出。 – sarnold 2011-04-02 00:06:33

+0

在rails項目中你也有空白嗎?並呈現?跟...共事。 – DGM 2011-04-02 04:32:02

6

使用include?並添加一個「不」來開頭:

![1, nil, 2, 'a'].include?(nil) 

如果所有元素都是非空,則數組不包括nil。使用.all?意味着你必須要掃描整個陣列,.include?應該爲它找到一個匹配,而且也沒有調用塊的開銷,就立即停止;所以,.include?應該更快,但性能差異可能是相當無關的,除非你有一個龐大的數組。我會選擇最適合你的。

+0

這可能會比我的答案快一點。 – 2011-04-01 23:50:32

+0

簡短而詳細。你贏得了一個獨角獸。 – 2011-04-01 23:56:53

+0

@Douglas:性能差異幾乎肯定會變得無關緊要。我真的很喜歡sarnold,只要清楚,使用'none?'完全符合意圖,清晰度通常是我的第一選擇。 – 2011-04-02 00:03:06

4

你打高爾夫?

因爲你會得到什麼這是我們所短而直。個人而言,我寧願一個稍微詳細方式:

[...].all? {|x| !x.nil? } 
0

我想你可以做:

!list.any?(&:nil?) 

但我覺得這比你原來的代碼更直接。更少的字符,但是,如果你不喜歡塊,這就隱藏了&中的塊:符號

[那麼,你原來的代碼有一個問題,那就是{| x | x}對於nil和false值均爲false。如果你真的想要塊{| x | !x.nil}]

0

幾乎同樣萬畝太短了,我不認爲我的任何比它好,只是另一種變體一樣:

![1, nil, 2, 'a'].index(nil) 
相關問題