Je veux retourner tous les éléments dans un hachage à l'exclusion de la première paire de clé / valeur.
Mon expérience est limitée donc ce que j'utilise est .except code> car il est non destructeur. < / p>
4 Réponses :
Adressage d'un premier élément est plus difficile, car le hachage, en tant que structure de données, n'a pas de commande pour des paires de clés. Mais de bonnes nouvelles est que, dans Ruby (ou au moins IRM / YARV), les hachages maintiennent l'ordre d'insertion et il est reflété lorsque vous ithéez les paires de la valeur clé. Donc, vous pourriez faire quelque chose comme ceci: p> ou, plus succinctly p> h.except (: a) code> fonctionnerait avec des rails / ActiveSupport, mais cela nécessite de connaître le nom de la clé.
... Mais vous connaissez le nom de la clé: h.first.first code>.
@CarySwoveland: h.except (h.first.first) code> est un solide Wtf-moment
Notez que l'idée de "premier" pour un Par exemple, il y a aucune garantie em> que qui étant dit, il y a un Notez que, comme c'est une méthode code> énumérable code>, il ne connaît rien de heureusement, il existe une méthode qui transforme un hachage code> est légèrement poisson. Il est vrai que hachage code> es dans RUBY est commandé par insertion, Ceci est garanti par la spécification , et vous pouvez donc compter sur lui dans chaque mise en œuvre sur chaque plate-forme, mais en général em>, le but d'un hachage code> est de rechercher des valeurs par les touches, pas em> comptez sur commande. : A code> sera la première clé de votre exemple. Il dépend complètement de la manière dont le hachage code> a été créé et dans lequel commande les clés ont été ajoutées. P> énumérable code> méthode qui fait exactement ce que vous voulez: déposez le premier n code> éléments de un énumérable code>, et il est sans surprise nommé < Code> Enumérable # Drop code> . P> hachage code> ES, la seule méthode à laquelle il connaît, c'est #each < / code> . Par conséquent, il retournera un tableau code> code> de tout ce que #each code> est des rendements, qui dans le cas d'un hachage code> est un élément de deux éléments [ Touche, valeur] code> paire: p> énumérable code> de la matrice de deux éléments code> s dans un hachage code>, nommément énumérable # to_h code> : p>
Vous pouvez utiliser #Shift < / Code> avec # Tapez sur code> comme:
J'aime, mais c'est destructeur.
Je n'aime pas l'idée de convertir le hachage en une matrice, de manipuler le tableau, puis de convertir le tableau modifié à un hachage, donc j'ai utilisé Hash # rejeter .
x = 1
h.reject { (x -= 1).zero? }
#=> {:b=>2, :c=>3}
C'est la plupart du temps pédannie, mais l'inconvénient de cette approche est qu'il itère sur chaque paire de valeur clé dans le hachage, même si vous savez que le bloc ne reviendra que de la vérité dans la première itération.
@Jordan, j'ai essayé d'éviter cela, mais je ne pouvais pas penser à une solution (non destructive) qui n'a pas énuméré toutes les paires de la valeur clé. Une manière ou une autre, toutes les solutions ne sont-elles pas toutes les solutions (y compris les conversions vers une matrice et d'un tableau de retour à un hachage). Avez-vous eu quelque chose en tête?
Avec des rails,
sauf code> devrait fonctionner.@Sergitulentsev oh ok je ne savais pas que c'était seulement pour les rails. Merci!
Cela fait partie de ActiveSupport, ce qui signifie qu'il est présent dans les rails par défaut, mais d'autres applications peuvent l'utiliser si vous avez besoin d'ActiveSupport.