在Ruby中,如何以不区分大小写的方式查找数组中元素的索引?

时间:2016-12-05 16:21:07

标签: arrays ruby indexof case-insensitive

我正在使用Ruby 2.3。我可以使用

找到数组中元素的索引
2.3.0 :001 > a = ["A", "B", "C"]
 => ["A", "B", "C"] 
2.3.0 :003 > a.index("B")
 => 1 

但如果我想以不区分大小写的方式找到元素的索引,我该怎么办?例如,我可以做到

2.3.0 :003 > a.index(“b”)

并获得与上述相同的结果?您可以假设,如果所有元素都是大写的,则数组中不会有两个相同的元素。

2 个答案:

答案 0 :(得分:2)

使用Array#find_index

a = ["A", "B", "C"]
a.find_index {|item| item.casecmp("b") == 0 }
# or
a.find_index {|item| item.downcase == "b" }

请注意,通常的Ruby警告适用于案例转换以及重音和其他非Latin字符的比较。这将在Ruby 2.4中发生变化。请参阅此问题:Ruby 1.9: how can I properly upcase & downcase multibyte strings?

答案 1 :(得分:0)

如果您知道该字符串包含所有大写字母,您可以使用方法upcase将字符串转换为大写字母:

2.3.0 :001 > a = ["A", "B", "C"]
 => ["A", "B", "C"] 
2.3.0 :002 > a.index("b".upcase)
 => 1 
2.3.0 :003 > tmp = "c"
 => "c" 
2.3.0 :004 > a.index(tmp.upcase)
 => 2