我有一个看似简单的问题,但我似乎无法理解解决方案。
我有一个看起来像这样的数组["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
```
答案 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