从数组中删除仅大小写不同的字符串值(Ruby)

Posted

技术标签:

【中文标题】从数组中删除仅大小写不同的字符串值(Ruby)【英文标题】:Remove string values that differ only in case from an array (Ruby) 【发布时间】:2012-11-06 20:12:00 【问题描述】:

所以,这是前言:

我是 Ruby 的初学者。我正在研究一个字谜查找脚本(在文本文件中查找所有字谜)。本质是:我创建了一个字典,其中键是单词代码,值是一个数组,其中包含引用此代码的单词。就是这样:"abdeis"=>["abides", "biased"] ,"achr"=>["char"], ... 。最后我只是打印出长度> 1的值。到目前为止一切顺利。

这是交易:我想修改输出,以便省略此类情况:["Wood", "wood", "WooD"] - 仅在大小写情况下都是不同的。但是这种情况应该保留:["Doom", "DooM", "mood"]

我目前的一段代码:

def print_anagram(anagram_dict)
  anagram_list = anagram_dict.values
  anagram_list.each  |i|
    if i.length > 1
      print i.join("\t")
      print "\n"
    else
      next
    end
   
end

anagram_dict 是上面提到的字典。

我应该做哪些检查才能扔掉这些箱子?我想到的东西对我来说似乎很笨重。提前致谢!

【问题讨论】:

我不明白 ["Wood", "WooD"] 和 ["Doom", "DooM"] 之间的区别。 @steenslag:厄运阵还包括“心情”,木阵只有“木” “我想到的东西对我来说似乎太庞大了。”你想到了什么?这几乎看起来像家庭作业,如果它应该被标记为这样,并且在这里不被禁止。在回答你的问题。我可能会让一切都一样,并在其上称为唯一 @vgoff 作业标签已过时(尝试搜索)。 谢谢@steenslag。我看到了大约 4800 个,所以直到现在才知道。仍然可以充分披露问题本身。 【参考方案1】:
def print_anagram(anagram_dict)
  anagram_list = anagram_dict.values
  anagram_list.each do |i|
    next if i.map(&:downcase).uniq.length == 1

    if i.length > 1
      print i.join("\t")
      print "\n"
    else
      next
    end
  end
end

这是做什么的:

将所有字符串设为小写

仅从数组中获取唯一元素

如果你只有一个独特的元素,那么所有的元素都是一样的

map(&:downcase) 是一种更短的方式:map |element| element.downcase

【讨论】:

谢谢,成功了!我现在将尝试为此找到一些其他解决方案,也许会稍微摆弄一下 Array#reject。【参考方案2】:

这是你想要的吗?

def print_anagram(anagram_dict)
  anagram_list = anagram_dict.values.uniq|word| word.downcase
  # rest of your code

【讨论】:

我明白你的意思了,这正是我一直在寻找的东西。它应该可以工作,但由于某种原因,它给我带来了一个错误:undefined method downcase' for ["A's"]:Array (NoMethodError)`。我会尝试调试东西,看看出了什么问题。

以上是关于从数组中删除仅大小写不同的字符串值(Ruby)的主要内容,如果未能解决你的问题,请参考以下文章

从Ruby中的两个数组映射值

ruby 使用索引从数组中删除值

ruby 使用索引从数组中删除值

固定大小键的最快持久键/值数据库并且仅插入/获取(无删除/更新)? [关闭]

通过从每个集合中仅选择一个值来选择 k 个大小的子集

C# 怎么把数组中的数据添加到datagridview中