Comment vérifier si un élément dans un tableau Ruby multidimensionnel existe dans un autre?
-
12-09-2019 - |
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?
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.