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

In Ruby, how do I find the index of an element in an array in a case-insensitive way?

我用的是Ruby 2.3。我可以使用

1
2
3
4
2.3.0 :001 > a = ["A","B","C"]
 => ["A","B","C"]
2.3.0 :003 > a.index("B")
 => 1

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

1
2.3.0 :003 > a.index("b")

得到和上面一样的结果?您可以假设,如果所有元素都是大写的,那么数组中就不会有两个相同的元素。


使用Array#find_index

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

注意,通常的Ruby注释适用于重音字符和其他非拉丁字符的大小写转换和比较。这将在Ruby2.4中发生变化。请看这个问题:Ruby1.9:如何正确地对大小写多字节字符串进行upcase和downcase操作?


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

1
2
3
4
5
6
7
8
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