从数组中删除仅大小写不同的字符串值(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)的主要内容,如果未能解决你的问题,请参考以下文章