我有一个像这样的数组:
array = ["username=stackoverflow", "password=12345", "id= 6"]
我的愿望是在" id "
中搜索array
,并获取" id=6"
元素的索引,即2
。
有可能吗?如何获取数组元素一部分的索引?
答案 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