2016-10-10 5 views
4

Ich möchte truthige Objekte in einem Array zählen. Da ich einen Block passieren kann zu zählen, der idiomatische Weg gefunden, ich war:Zähle truthige Objekte in einem Array

Aber ich habe mich gefragt, ob es eine bessere Art und Weise war, vor allem der Syntax count(&:something) verwenden, da hier ein voller Block schaut vorbei wie Overkill für mich.

AFAIK, gibt es keine truthy? Methode in Ruby, also konnte ich nicht finden, wie man das erreicht.

+2

Nur aus Neugier, könnte man eine Menge von '' falsey's [1, nil berechnen , 'foo', false, true] .count (& :!) 'und subtrahiere sie von der ursprünglichen Größe des Arrays :) – mudasobwa

Antwort

12

mit Ruby> = 2.2 können Sie Object#itself verwenden:

[1, nil, 'foo', false, true].count(&:itself) 
#=> 3 
+1

Ruby 2.2.0 macht das auch ... https://ruby-doc.org/core-2.2 .0/Object.html # method-i-self – lcguida

-1

Versuchen Sie folgendes:

[1, nil, 'foo', false, true].count(true) 
+0

Dies gilt nur für "wahre" Objekte. Das Ziel war, alle truthigen Objekte zu zählen (dh. "1" und "foo" sollten auch gezählt werden.) – Mat

+0

Sie haben recht, danke –

Verwandte Themen