检查数组中的项是否与Ruby中的相同

时间:2015-03-10 12:39:48

标签: ruby arrays

我有一个看似简单的问题,但我似乎无法理解解决方案。

我有一个看起来像这样的数组["foobar", "foo", "bar", "foobar"]我想写一个方法来检查数组的元素并加入两个不同的元素。因此得到的数组将是["foobar", "foobar", "foobar"]

我已经厌倦了以下内容,但我得到了一系列数字,而不是字符串。

```

array = %w(foobar foo bar foobar)
@i = 0
array.map do |item|
  if item != array[i+1]
    item + array[@i+1]
  else
    item
  end
  i += 1
end

```

1 个答案:

答案 0 :(得分:1)

您在数组中获取数字的原因是i+=1返回一个数字,这就是结果数组中的结果。你想要做的是创建一个包含索引的迭代器,然后映射:

array.each_with_index.map do |item, i|
  if item != array[i + 1]
    item + array[i + 1]
  else
    item
  end
end

但实际上并没有给你你想要的结果,因为对于你的示例数组,你会得到['foobar', 'foobar', 'barfoobar', 'foobar']

最佳方法取决于数组的实际预期内容。对于您的样本数组,我会这样做:

array.each_with_index.map do |item, i|
  if item != array[i + 1] && array[i + 1] != array.max
    item + array[i + 1]
  elsif item != array[i + 1]
    nil
  else
    item
  end
end.compact