检查部分值是内部阵列
问题描述:
我有这样的阵列:检查部分值是内部阵列
>> arr = [["a",1,"b"],["a",2,"b"],["b",3,"d"],["t",6,"a"]]
我要检查,如果[“一”,1]存在于arr
内部而忽略了arr
项的第三值。
是否有更好的方法,然后在arr
第一去除每个项目的第3个值:
>> new_arr = [["a",1],["a",2],["b",3],["t",6]]
,然后做
>> new_arr.include? ["a",1]
true
喜欢的东西:
arr.include? ["a",1,/*/] #the 3rd value can be anything
感谢。
答
你可以试试下面的:
arr = [["a",1,"b"],["a",2,"b"],["b",3,"d"],["t",6,"a"]]
arr.any? { |v1, v2, *| [v1, v2] == ["a", 1] }
# => true
arr.any? { |v1, v2, *| [v1, v2] == ["a", 4] }
# => false
包装逻辑的方法中:
def check_subarray(ary, sub_ary)
ary.any? { |e1, e2, *| [e1, e2] == sub_ary }
end
arr = [["a",1,"b"],["a",2,"b"],["b",3,"d"],["t",6,"a"]]
check_subarray(arr, ["a", 1]) # => true
答
另一种方式:
def values_there?(arr, val)
arr.transpose[0,val.size].transpose.include? val
end
values_there?(arr, ["a", 2]) #=> true
values_there?(arr, [3, "d"]) #=> false
答
下面是一个更复杂的版本@奥雅纳的答案(它可以处理任意长度)
def match_head(*head)
->(full_array) {
head.each_with_index do |head_elem, idx|
return false if full_array[idx] != head_elem
end
true
}
end
ary = [["a",1,"b"],["a",2,"b"],["b",3,"d"],["t",6,"a"]]
ary.any?(&match_head('a')) # => true
ary.any?(&match_head('c')) # => false
ary.any?(&match_head('a', 1)) # => true
ary.any?(&match_head('a', 1, 'b')) # => true
ary.any?(&match_head('a', 1, 'f')) # => false
谢谢!像一个魅力 – MichaelR 2014-08-31 06:45:22
@MichaelR你的*复选标记*是我的生日礼物。 :-) – 2014-08-31 06:45:57
希望你会多得几个;) – MichaelR 2014-08-31 06:47:52