簡體   English   中英

搜索符號數組-Ruby

[英]Search array of symbols - Ruby

給定一個符號數組,您將如何遍歷該數組並存儲匹配對的數組索引?

foo = [:date, :recorded_at, :scheduled_for, :amount, :activity, :pending ]

例如,如果您搜索“ recorded_at”和“活動”,則應返回[1,4]

我認為這樣會起作用:

bar = ['recorded_at','activity']
buzz = bar.each{|i| foo.index(i.to_sym)}

但是,這僅返回字符串["foo", "bar"] ,而不是實際的數組索引。

使用Array#map代替Array#each

buzz = bar.map{|i| foo.index(i.to_sym)}
#=> [1, 4]

一種有效的方法是,首先將foo轉換為哈希值,特別是如果必須多次執行此操作(對於bar不同值)或數組較大的情況:

foo = [:date, :recorded_at, :scheduled_for, :amount, :activity, :pending ]

foo_hash = Hash[foo.map(&:to_s).zip([*0...foo.size]).to_h]
  #=> {"date"=>0, "recorded_at"=>1, "scheduled_for"=>2,
  #    "amount"=>3, "activity"=>4, "pending"=>5}

然后,它是對bar任何值的簡單哈希查找:

bar = ['recorded_at','activity']
foo_hash.values_at(*bar)
  #=> [1, 4]

對於Ruby 1.9+, Hash[arr]可以替換為arr.to_h

如果n=foo.sizem=bar.size ,則在構造哈希之后僅需要m哈希查找。 相比之下,對於bar每個元素,平均而言,將進行n/2比較,以找到與bar的元素匹配的foo元素的索引,總共進行m*n/2比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM