比较数组并为每个相等元素打印符号

问题描述 投票:-1回答:2

我想比较两个数组AB,例如:

A = [3,1,4,5]
B = [3,6,4,1]

并打印出一个符号'^'(数组B)用于匹配元素,'+'用于匹配与另一个数组(数组A)位于相同索引位置的元素。输出应该是这样的:

+ +^
arrays ruby
2个回答
2
投票

在ruby中有很多方法可以做到这一点。这是一种非常灵活和富有表现力的语言。以下是一些:

A = [3,1,4,5]
B = [3,6,4,1]

# 1.
puts(
  B.map.with_index do |b_item, index|
    if A[index] == b_item
      '+'
    elsif A.include?(b_item)
      '^'
    else
      ' '
    end
  end.join
)

# 2.
B.each_with_index do |b_item, index|
  print(
    if A[index] == b_item
      '+'
    elsif A.include?(b_item)
      '^'
    else
      ' '
    end
  )
end

# 3.
puts(
  A.zip(B).map do |a_item, b_item|
    if a_item == b_item
      '+'
    elsif A.include?(b_item)
      '^'
    else
      ' '
    end
  end.join
)

一些小调:

  • 你应该将这个逻辑移动到一个单独的方法中,然后只有puts / print该方法调用的结果。这将使puts / print看起来不那么不合适,并允许您将结果用于其他事情。
  • 解决方案#2略有不同,因为最后没有打印换行符。 (你没有在问题中指明这个?)

就个人而言,我会选择第一种方法,因为它最容易理解。


0
投票
B.map.with_index do |e, i|
  next '+' if A[i] == e
  A.index(e) ? '^' : ' '
end.join
© www.soinside.com 2019 - 2024. All rights reserved.