【问题标题】:Compare multidimensional array and return index比较多维数组并返回索引
【发布时间】:2014-03-25 17:18:17
【问题描述】:

Ruby 1.8.7

array = [[1.5,"cm"],[1.5,"cm"],[1.5,"m"]]

如何比较变量数组里面的每个数组,看是否相等, 如果相等则继续,否则如果不相等则返回不相等的数组元素的索引并停止比较

所以在这个例子中,

array[0] == array[1] 
#=> true

那么,继续

array[1] == array[2]
=> false

因此返回指数,即 = 1

return 1

【问题讨论】:

  • 如果都相等那么返回什么?
  • @ArupRakshit:想法是从头开始比较,不一致时停止并返回索引,如果所有值都相同则返回nil
  • @MarkV 这样的功能有什么实际应用?

标签: ruby ruby-1.8.7


【解决方案1】:

这是我使用Array#each_index 的方法:

def compare_array_elements(array)
  siz = array.size - 1
  array.each_index { |i| return i if i != siz && array[i] != array[i+1] }
  nil
end

array = [[1.5,"cm"],[1.5,"cm"],[1.5,"mm"]] 
compare_array_elements(array) # => 1

array = [[1.5,"cm"],[1.5,"cm"],[1.5,"cm"]]
compare_array_elements(array) # => nil

【讨论】:

  • 不使用检查siz 你可以只做array.each_index[0..-2]
  • @TomFenech 我也在我的办公桌上思考。我再次在想这是否是 Rubyish 的想法.. :-)
  • @TomFenech 应该是array[0..-2].each_index BTW .. :)
  • 注意!无论哪种方式,不应该在比较之前对siz 进行检查,以便它短路 && 而不是与nil 进行比较?
  • @TomFenech Humm.. 这是个好主意.. 确实
【解决方案2】:
[[1.5,"cm"],[1.5,"cm"],[1.5,"m"]]
.each_cons(2).with_index(1).find{|(a, b), i| a == b}.last
# => 1

【讨论】:

  • ...但这是什么意思?!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
相关资源
最近更新 更多