我有两个简单的数字数组,代表一个物体的笛卡尔位置。
if(isset($_POST['nickname'])){
$nickname= $_POST['nickname'];
$sql4 = $dbh->prepare("SELECT nickname FROM registration WHERE nickname = :nickname");
$sql4->execute(array(":nickname"=>$nickname));
if($sql4->rowCount() > 0){
echo "toto jméno již existuje";
}
}
我想检查一下" a"和" b"彼此相邻。我想将两者转换成矩阵并执行两个位置的减法,然后检查任一元素的绝对值是否为" 1"。
有办法做到这一点吗?
答案 0 :(得分:2)
您首先需要获取未初始化的常量错误:
require 'matrix'
然后你可以:
Matrix[a,b]
交互式输出示例:
irb(main):011:0> require 'matrix'
=> true
irb(main):012:0> Matrix[a,b]
=> Matrix[[3, 4], [8, 5]]
答案 1 :(得分:1)
我不认为在这里使用Matrix
类方法是合理的。唯一有用的方法是Matrix#-,但要使用它需要将数组转换为Matrix
个对象,请应用Matrix#-
,然后将生成的矩阵对象转换回数组确定任何元素的绝对值是否等于1(哇!)。我只是这样做:
def adjacent?(a,b)
a.zip(b).any? { |i,j| (i-j).abs == 1 }
end
adjacent?([3, 4], [8, 5]) #=> true
adjacent?([3, 7], [8, 5]) #=> false
adjacent?([3, 7], [2, 5]) #=> true
对于第一个例子:
a = [3, 4]
b = [8, 5]
c = a.zip(b)
#=> [[3, 8], [4, 5]]
c.any? { |i,j| (i-j).abs == 1 }
#=> true
最后一个语句确定以下任何一个是true
。
(3-8).abs == 1
(4-5).abs == 1