Question

Je suis en train de déterminer si l'un élément dans un tableau multidimensionnel existe dans un autre tableau de structure similaire.

suspects = [['Rod', 100], ['Jane', 75], ['Freddy', 125]]
criminals = [['Bill', 75], ['Ted', 50], ['Rod', 75]]

La réponse que je cherche est vrai ou faux. Dans l'exemple ci-dessus la réponse serait vrai parce que Rod existe dans les deux tableaux. La valeur du nombre entier a, dans le second réseau de palier est sans incidence.

Comment puis-je coder un tel test dans succinctness généralement Ruby-like?

Était-ce utile?

La solution

suspects.any? do |suspect, _|
  criminals.any? do |criminal, _|
    suspect == criminal
  end
end

Autres conseils

Plus rapide comme ceci:

suspects.any? {|s,_| criminals.assoc(s)}

sepp2k me battre pour elle, mais je dois présenter juste pour montrer comment nous étions dans la mise en œuvre à proximité:


suspects.find do |suspect_name, _|
  criminals.find {|criminal_name, _| criminal_name == suspect_name}
 end 

J'aime son utilisation de tout ?, mais pense que le bloc interne devrait être en ligne:)

Que diriez-vous:

(suspect.size + criminal.size) > (suspect | criminals).size

Exemple:

suspects = [['Rod', 100], ['Jane', 75], ['Freddy', 125]]
criminals = [['Bill', 75], ['Ted', 50], ['Rod', 75]]

guilty = (suspects.size + criminals.size) > (suspects | criminals).size
# Returns false. Since no common element was found in the merging.

criminals << ['Jane', 75]
guilty = (suspects.size + criminals.size) > (suspects | criminals).size
# Returns true. Since one element is common, merged array will be shorter by one.

Je recommande pas nécessairement, mais anthères l'option d'une ligne (deux si vous comptez le require) pourrait être ceci:

require 'set'
(suspects.map{|s| s[0]}.to_set & criminals.map{|c| c[0]}.to_set).size > 0

=> true

Il construit des réseaux du premier élément de chaque élément convertit ensuite à un Set. Set a la méthode & (intersect) et nous regardons la taille du résultat de notre réponse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top