Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby,无法解释的reduce行为_Ruby_Reduce - Fatal编程技术网

Ruby,无法解释的reduce行为

Ruby,无法解释的reduce行为,ruby,reduce,Ruby,Reduce,你好。在不同的编程竞赛中解决一类“查找唯一值”问题的常见做法是使用以下代码arr.reduce(:^): 例如,像这样的任务会给您一个奇数长度的整数数组,其中除一个数字外,所有整数都是相同的。查找此数字通常通过以下方式解决: [8,8,8,5,8,8,8]。减少(:^)#5 我开始做实验,发现这个解决方案有一个缺口,就是: p [8,2,2].reduce(:^) # 8 p [8,2,2,2].reduce(:^) # 10 !!!!!!!! p [8,2,2,2,2].reduce(:^)

你好。在不同的编程竞赛中解决一类“查找唯一值”问题的常见做法是使用以下代码
arr.reduce(:^)

例如,像这样的任务会给您一个奇数长度的整数数组,其中除一个数字外,所有整数都是相同的。查找此数字通常通过以下方式解决:
[8,8,8,5,8,8,8]。减少(:^)#5

我开始做实验,发现这个解决方案有一个缺口,就是:

p [8,2,2].reduce(:^) # 8
p [8,2,2,2].reduce(:^) # 10 !!!!!!!!
p [8,2,2,2,2].reduce(:^) # 8
我发现在任何数组格式中,
reduce(:^)
都找不到
x

为什么会这样?(我的ruby是MRI 2.3.0)

给你一个奇数长度的整数数组

[8,2,2,2]
奇数长度是多少

第三个
2
永远不会被异或输出。人们可以一步一步地检查这一点:

8 ^ 2
#⇒ 10
8 ^ 2 ^ 2
#⇒ 8 # because 2 and 2 are XOR’ed out
8 ^ 2 ^ 2 ^ 2
#⇒ 10 # because it’s the same as 8 ^ 2
此外:

给你一个奇数长度的整数数组

[8,2,2,2]
奇数长度是多少

第三个
2
永远不会被异或输出。人们可以一步一步地检查这一点:

8 ^ 2
#⇒ 10
8 ^ 2 ^ 2
#⇒ 8 # because 2 and 2 are XOR’ed out
8 ^ 2 ^ 2 ^ 2
#⇒ 10 # because it’s the same as 8 ^ 2
此外:


@mudasobwa的回答是正确的。但是,要了解更多信息,您可能需要了解:

对于您的用例,您最好使用:

[8,2,2,2].inject{|i,n| i > n ? i : n}
让我们看看引擎盖下面发生了什么:

def max_array_int(arr)
  arr.inject do |i,n|
    check = i > n ? i : n
    puts "evaluated #{i} > #{n}. result: #{check}"
    check
  end
end

max_array_int [10,3,15,7]

@mudasobwa的回答是正确的。但是,要了解更多信息,您可能需要了解:

对于您的用例,您最好使用:

[8,2,2,2].inject{|i,n| i > n ? i : n}
让我们看看引擎盖下面发生了什么:

def max_array_int(arr)
  arr.inject do |i,n|
    check = i > n ? i : n
    puts "evaluated #{i} > #{n}. result: #{check}"
    check
  end
end

max_array_int [10,3,15,7]