获取数组元素一部分的索引

时间:2018-09-13 08:56:06

标签: arrays ruby search

我有一个像这样的数组:

array = ["username=stackoverflow", "password=12345", "id= 6"]

我的愿望是在" id "中搜索array,并获取" id=6"元素的索引,即2

有可能吗?如何获取数组元素一部分的索引?

4 个答案:

答案 0 :(得分:2)

array = ["username=stackoverflow", "password=12345", "id= 6"]
array.index{ |i| i["id"] }
#=> 2
array.index{ |i| i["non-existing"] }
#=> nil

index接受块或元素,并将返回数组中元素的索引或第一个true谓词应用程序的索引。

array.index("id= 6")
#=> 2

在我们的例子中,我们使用一个块作为谓词。此块将应用于数组中的所有元素。该块看起来像i["id"],是在字符串中获取子字符串“ id”的简写。因此,我们正在寻找第一个带有“ id”子字符串的元素。

正如下面提到的评论,使用当前方法可能会产生一些误报。例如,字符串“ username = Midas”也具有id子字符串,因此您最好使用更严格的模式,例如i[/^id=/](thx @Stefan),以仅标识以“ id =“子字符串。

答案 1 :(得分:1)

数组没有用于初始化数组的变量名称的信息。数组仅存储值。

使用Hash代替,它允许您存储键和值:

dyld: lazy symbol binding failed: can't resolve symbol _XCStringFromRect in /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/lib/../../Library/Frameworks/XCTest.framework/XCTest because dependent dylib #12 could not be loaded
dyld: can't resolve symbol _XCStringFromRect in /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/lib/../../Library/Frameworks/XCTest.framework/XCTest because dependent dylib #12 could not be loaded

答案 2 :(得分:0)

array = [ "username=stackoverflow", "password=12345", "id= 6"]
array.find_index { |e| e.split(/\s*=\s*/)[0] == 'id' }

这将用等号对每个元素进行拆分,可能用空格包围,如果拆分的第一部分为'id',则返回索引。如果要重复执行此操作,几乎可以肯定最好将其转换为易于查找的结构,例如哈希。

答案 3 :(得分:0)

array.to_enum.with_index.find{|e, _| e.match?(/id/)}.last
# => 2