Ruby 检查部分值是否在数组中

Ruby 检查部分值是否在数组中,ruby,Ruby,我有这个阵列: >> arr = [["a",1,"b"],["a",2,"b"],["b",3,"d"],["t",6,"a"]] 我想检查arr中是否存在[“a”,1],同时忽略arr项的第三个值 是否有更好的方法首先删除arr中每个项目的第三个值: >> new_arr = [["a",1],["a",2],["b",3],["t",6]] 然后做什么 >> new_arr.include? ["a",1] true 比如: arr.include

我有这个阵列:

>> arr = [["a",1,"b"],["a",2,"b"],["b",3,"d"],["t",6,"a"]]
我想检查
arr
中是否存在[“a”,1],同时忽略
arr
项的第三个值

是否有更好的方法首先删除
arr
中每个项目的第三个值:

>> 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

您可以尝试以下方法:

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 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

这里是@Arup答案的一个更复杂的版本(尽管它可以处理任意长度)


这里是@Arup答案的一个更复杂的版本(尽管它可以处理任意长度)


@迈克尔:你的复选标记是我的生日礼物。:-)希望你能多得到几个;)是的,还有更多的生日。@MichaelR你的复选标记是我的生日礼物。:-)希望你能多得到几个;)是的,还有更多的生日。