【发布时间】:2017-07-02 16:52:15
【问题描述】:
我使用的是 Ruby 2.4。我有一个字符串数组,如果它们之间有一个“-”,我想加入连续的元素。所以,例如,如果我有
["a", "-", "b", "c"]
我希望结果是
["a - b", "c"]
如果数组是类似的
["a-", "b", "c"]
我希望结果是
["a- b", "c"]
或者如果数组是
["a", "-b", "c", "d"]
我希望结果是
["a -b", "c", "d"]
一个例外是,如果相邻的标记之一已经包含“-”,我不想将它们合并在一起。例如,如果我有
["a", "-", "b-c", "d"]
我希望数组保持为
["a", "-", "b-c", "d"]
Cary 帮我想出了这个功能
def join_some(arr, special_chars_arr)
arr.drop(1).each_with_object([arr.first]).with_index(1) do |(s,a),i|
puts "s: #{s} a: #{a.last}"
if ((special_chars_arr.include?(s[0]) && (i < arr.size - 1 || s.size > 1)) ||
(special_chars_arr.include?(a.last[-1]) && (i > 1 || a.last.size > 1))) &&
a.last !~ Regexp.union(special_chars_arr)
a.last << " #{s}"
else
a << s
end
end
end
但问题是如果我的数组是
["a", "-", "b-c"]
调用 join_some(arr, ["-"]) 把事情变成
["a - b-c"]
我不想合并相邻的标记,因为其中一个标记已经包含破折号。我怎样才能修改我的方法来做我想做的事?
【问题讨论】:
-
你能有
["a", "-", "b", "-", "c"]吗?如果是这样,期望的结果是什么?["a-", "-b"]呢? -
第二种情况应该保持为 ["a-", "-b"] 因为第二个标记已经包含一个 "-"。对于第一种情况,如果可能的话,我想要 ["a - b - c"]。如果只有 ["a", "-", "b", "-", "c"] 和所有其他情况都有效,那很好。
-
以这种方式处理第一种情况实际上更容易。
["-", "a", "b"]和["a", "b", "-"]呢?["- a", "b"]和["a", "b -"]或其他什么都不会改变吗?换句话说,对于成对连接,"-"的处理方式与"a-"或"-a"的处理方式有何不同? -
对于 ["a", "b", "-"],它应该保持为 ["a", "b", "-"],因为 "- 之后没有标记“ 元素。与 ["- a", "b"] 相同 -- 它应该保持为 ["- a", "b"],因为 "-" 之前没有元素。希望这是有道理的。