簡體   English   中英

從ruby中的數組中獲取最新版本

[英]get the latest version from an array in ruby

我有一個名為unique_versions的版本號數組,它們不斷增加:

1.7.16
1.7.14
1.7.13
1.7.12
1.7.9
1.7.7
1.7.5
1.7.4
1.7.2
1.6.2
1.2.1
1.2.0
1.1.0
0.0.1

我需要從陣列中獲取最新的(1.7.16)。 什么是最優雅的紅寶石做法呢? 我通過以下代碼獲取此數組:

require "json"
require "open-uri"
require 'openssl'

string_object = open("https://xxx", :http_basic_authentication=>["xxx"], :ssl_verify_mode=>OpenSSL::SSL::VERIFY_NONE)
json_file = JSON.parse(string_object.read)
version_array = Array.new
json_file["results"].each do |version|
    version_array.push(version["version"].sub /-.*$/, '')
end
unique_versions=(version_array.uniq)

版本處理已在Gem::Version (以及其他版本)中實現,無需重新發明輪子。

string_versions.max_by{ |s| Gem::Version.new(s) } # => "1.7.16"

這似乎有效

unique_versions.sort_by { |version| version.split('.').map(&:to_i) }
 => ["0.0.1", "1.1.0", "1.2.0", "1.2.1", "1.6.2", "1.7.2", "1.7.4", "1.7.5", "1.7.7", "1.7.9", "1.7.12", "1.7.13", "1.7.14", "1.7.16"]

所以

unique_versions.max_by { |version| version.split('.').map(&:to_i) }
 => "1.7.16" 

請注意,您可以重寫此部分

version_array = Array.new
json_file["results"].each do |version|
    version_array.push(version["version"].sub /-.*$/, '')
end
unique_versions=(version_array.uniq)

在類似的東西

 unique_versions = json_file["results"].map { |version| version["version"].sub /-.*$/, '' }.uniq

暫無
暫無

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

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