【问题标题】:Ruby - Iterate through each string inside an array and remove repeated charactersRuby - 遍历数组中的每个字符串并删除重复的字符
【发布时间】:2021-12-10 02:43:56
【问题描述】:

我需要单独从每个字符串中取出每个重复项,而不是从整个数组中取出。基本上我正在寻找的是数组中每个字符串的.uniq,而不是整个数组。

例子:

array = ["abc", "abc", "xxzzyyww", "aaaaa"]

预期输出:

["abc", "abc", "xzyw", "a"]

我尝试使用array.uniqarray.each.uniq,但他们没有单独考虑每个字符串,他们正在检查整个字符串是否在数组中重复,所以它给了我以下输出:

["abc", "ab", "xxzzyyww", "aaaaa"]

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 您的示例使读者认为您关心的是连续消除两个相同的字符。如果您想将"aaba" 转换为"ab",您应该使用不同的示例。无论如何,您都需要进行编辑以澄清您的问题。
  • @Cary Swoveland 这个问题很清楚,当他说独特时,这也包括你给定的例子。

标签: arrays ruby string duplicates iteration


【解决方案1】:

如何使用string#squeeze (https://apidock.com/ruby/String/squeeze)

array = ["abc", "abc", "xxzzyyww", "aaaaa"]
# => ["abc", "abc", "xxzzyyww", "aaaaa"]

array.map {|x| x.squeeze }
# => ["abc", "abc", "xzyw", "a"]

【讨论】:

  • 或者简单地说:array.map(&:squeeze)
  • 谢谢,它在大多数情况下都有效,但在其中一种情况下,我有一个字符串数组,如下所示:'qzbw qez xgedfibnyuhqsrazlwtpocj fxgpoqijdzybletckwaunsr'\ 'pwnqsizrfcbyljexgouatd ljtperqsodghnufiycxwabzw' 并且由于某种原因,它并没有消除每个重复项。 ..无法弄清楚为什么,寿。但是用.chars.uniq 替换.squeeze 就成功了。
【解决方案2】:

输入

array = ["abc", "abc", "xxzzyyww", "aaaaa"]

代码

p array.map { _1.chars.uniq.join }

输出

["abc", "abc", "xzyw", "a"]

【讨论】:

  • 谢谢!那个适用于每个数组中的每一个字符串。顺便问一下,_1 在这里有什么用处?这只是|x| x. 的另一种说法吗?
  • 是的。你是对的。
猜你喜欢
  • 2021-06-19
  • 1970-01-01
  • 2014-08-05
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多