獲得從陣列
回答
h = ["7", "8", "11", "13", "14"].map(&:to_i).sort.group_by{|e| e <=> 11}
h[-1].last || h[1].first # => 8
不錯,sawa! –
對於像我這樣看着「我想要一個數組中最接近3的數字,如果可能的話完全匹配」的人,這裏是你的解決方案: 'tmp = [1,2,3,5,6]。 sort.group_by {| e | e <=> number_to_find}; closest_or_exact_number = tmp.try(:[],0).first || tmp.try(:[],-1).last || tmp [1] .first' – Erowlin
def closest(arr, target)
return nil if arr.empty?
a = (arr + [target]).sort_by(&:to_i)
idx = a.rindex(target)
idx > 0 ? a[idx-1] : a[idx+1]
end
arr = ["11", "7", "13", "8", "11", "14"]
closest(arr, "12") #=> 11
closest(arr, "12.5") #=> 11
closest(arr, "11") #=> 11
closest(arr, "4") #=> 7
closest(arr, "7") #=> 7
編輯:下面是一個使用方法Object#to_enum,Enumerator#next和Enumerator#peek另一種方式:
def closest(arr, target)
return nil if arr.empty?
e = arr.map(&:to_i).sort.to_enum
x = nil # initialize to anything
loop do
x = e.next
break if x > target || e.peek > target
end
x.to_s
end
對於arr
以上:
closest(arr, 12) #=> 11
closest(arr, 12.5) #=> 11
closest(arr, 11) #=> 11
closest(arr, 4) #=> 7
closest(arr, 7) #=> 7
當枚舉數在上屆值,peek
將生成一個StopIteration
異常。 Kernel#loop通過跳出循環來處理該異常。
另一種方式來解決這個問題:
a = arr.map(&:to_i).sort #=> [7, 8, 11, 13, 14]
a.reverse.find { |e| e < 11 } #=> 8
a.find { |e| e > 11 } #=> 13
由於find
回報nil
如果沒有對象相匹配,最後兩行可以合併通過:
a.reverse.find { |e| e < 11 } || a.find { |e| e > 11 }
...或'a.reverse_each.find ..'以避免創建臨時數組'a.reverse'。 –
試試下面最短的方法獲得最接近值
n = 40
a = [20, 30, 45, 50, 56, 60, 64, 80]
a.sort.min_by{|x| (n-x).abs}
- 1. 獲得從夫特陣列
- 2. 獲得從陣列/ PHP
- 3. 從陣列中獲得PHP
- 4. 獲得在陣列
- 5. PHP獲得陣列
- 6. Java陣列列表獲得
- 7. PHP,獲得當鑰匙從陣列
- 8. 獲得從模型屬性的陣列
- 9. 的MongoDB從陣列獲得模型
- 10. 我需要從陣列中獲得NID
- 11. 從陣列中獲得值用foreach
- 12. 從MySQL獲得的陣列數據
- 13. 如何從WCHAR陣列獲得子
- 14. 從QAudioInput的qbytearray獲得浮點陣列
- 15. 如何獲得僅從陣列
- 16. 獲得從對象陣列中C#
- 17. 顯示我從類獲得的陣列
- 18. 獲得從動態生成的陣列
- 19. Laravel從陣列中獲得價值
- 20. 搜索陣列並獲得陣列鍵
- 21. 如何獲得陣列進行陣列
- 22. 獲得從子陣列差值子陣列中的PHP
- 23. 從陣列中獲得數據與ReactJS陣列
- 24. 獲得圖表陣列
- 25. 獲得來自陣列
- 26. 獲得來自陣列
- 27. 如何獲得陣列
- 28. 獲得來自陣列
- 29. 獲得來自陣列
- 30. jquery獲得選擇陣列
實施您描述的方法時發生了什麼?你有沒有得到任何錯誤或錯誤的結果?請描述你的方法和你得到的任何錯誤。有關如何針對Stack Overflow提出問題的詳細信息,請參閱[我可以在這裏詢問哪些主題?](http://stackoverflow.com/help/on-topic)。 –
我不明白你想要什麼。什麼是「最接近的號碼」?按指數,按價值?更具體一點,你總是可以使用[文檔](http://ruby-doc.org/core-2.2.0/Array.html) – nobilik
一些更多的細節將有所幫助。數組是否已排序?你可以重複嗎?你的整型數組是否被實際定義爲一個字符串數組?如果數組是空的呢?整數傳入的限制是什麼?輸入和輸出涵蓋這些案例的例子將幫助我們爲您提供幫助。 –