কিছু সংস্করণ স্ট্রিং তুলনা করতে এবং নতুন পেতে কীভাবে কোনও টুকরো কোড লিখবেন?
উদাহরণ হিসেবে বলা যায় স্ট্রিং পছন্দ: '0.1', '0.2.1', '0.44'
।
কিছু সংস্করণ স্ট্রিং তুলনা করতে এবং নতুন পেতে কীভাবে কোনও টুকরো কোড লিখবেন?
উদাহরণ হিসেবে বলা যায় স্ট্রিং পছন্দ: '0.1', '0.2.1', '0.44'
।
উত্তর:
Gem::Version.new('0.4.1') > Gem::Version.new('0.10.1')
Gem::Version...
সিনট্যাক্স আমাকে ভাবলাম একটি মণি ইনস্টল করতে হবে প্রণীত। তবে এটির প্রয়োজন ছিল না।
Gem::Dependency.new(nil, '~> 1.4.5').match?(nil, '1.4.6beta4')
require 'rubygems'
অ্যাক্সেস পেতে আপনার একটি দরকার Gem
। 1.9 থেকে, তবে এটি স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত।
আপনার যদি হতাশাবাদী সংস্করণের সীমাবদ্ধতাগুলি পরীক্ষা করতে হয় তবে আপনি মণি :: নির্ভরতা ব্যবহার করতে পারেন :
Gem::Dependency.new('', '~> 1.4.5').match?('', '1.4.6beta4')
Gem::Dependency.new('', '~> 1.4.5').match?('', '1.4.6beta4')
class Version < Array
def initialize s
super(s.split('.').map { |e| e.to_i })
end
def < x
(self <=> x) < 0
end
def > x
(self <=> x) > 0
end
def == x
(self <=> x) == 0
end
end
p [Version.new('1.2') < Version.new('1.2.1')]
p [Version.new('1.2') < Version.new('1.10.1')]
vers = (1..3000000).map{|x| "0.0.#{x}"}; 'ok' puts Time.now; vers.map{|v| ComparableVersion.new(v) }.sort.first; puts Time.now # 24 seconds 2013-10-29 13:36:09 -0700 2013-10-29 13:36:33 -0700 => nil puts Time.now; vers.map{|v| Gem::Version.new(v) }.sort.first; puts Time.now # 41 seconds 2013-10-29 13:36:53 -0700 2013-10-29 13:37:34 -0700
কোড ব্লব এটিকে কুৎসিত করে তুলছে, তবে মূলত, এই বনাম রত্ন :: সংস্করণটি প্রায় দ্বিগুণ দ্রুত গতিতে ব্যবহার করা হচ্ছে।
আপনি Versionomy
রত্নটি ব্যবহার করতে পারেন ( গিথুবে উপলভ্য ):
require 'versionomy'
v1 = Versionomy.parse('0.1')
v2 = Versionomy.parse('0.2.1')
v3 = Versionomy.parse('0.44')
v1 < v2 # => true
v2 < v3 # => true
v1 > v2 # => false
v2 > v3 # => false
আমি করবো
a1 = v1.split('.').map{|s|s.to_i}
a2 = v2.split('.').map{|s|s.to_i}
তাহলে আপনি করতে পারেন
a1 <=> a2
(এবং সম্ভবত অন্যান্য সমস্ত "সাধারণ" তুলনা)।
... এবং যদি আপনি একটি <
বা >
পরীক্ষা চান , আপনি উদাহরণস্বরূপ করতে পারেন
(a1 <=> a2) < 0
বা আপনি যদি তেমন ঝোঁক থাকেন তবে আরও কিছু ফাংশন মোড়ানো করুন।
Gem::Version
এখানে যাওয়ার সহজ উপায়:
%w<0.1 0.2.1 0.44>.map {|v| Gem::Version.new v}.max.to_s
=> "0.44"
যদি আপনি কোনও রত্ন ব্যবহার না করে হাত দিয়ে এটি করতে চান তবে নীচের মতো কিছু কাজ করা উচিত, যদিও এটি কিছুটা অবনমিত দেখাচ্ছে।
versions = [ '0.10', '0.2.1', '0.4' ]
versions.map{ |v| (v.split '.').collect(&:to_i) }.max.join '.'
মূলত, আপনি প্রতিটি সংস্করণ স্ট্রিংকে পূর্ণসংখ্যার অ্যারেতে পরিণত করেন এবং তারপরে অ্যারের তুলনা অপারেটরটি ব্যবহার করেন । আপনি যদি কোডটিতে চলেছেন তবে কারওর বজায় রাখতে হবে এমন কিছু অনুসরণ করার জন্য উপাদানটির পদক্ষেপগুলি ছিন্ন করতে পারেন।
আমার একই সমস্যা ছিল, আমি একটি রত্ন-কম সংস্করণ তুলনামূলক চেয়েছিলাম, এটি নিয়ে এসেছিল:
def compare_versions(versionString1,versionString2)
v1 = versionString1.split('.').collect(&:to_i)
v2 = versionString2.split('.').collect(&:to_i)
#pad with zeroes so they're the same length
while v1.length < v2.length
v1.push(0)
end
while v2.length < v1.length
v2.push(0)
end
for pair in v1.zip(v2)
diff = pair[0] - pair[1]
return diff if diff != 0
end
return 0
end
Version
ক্লাস লিখেছিলাম যা আমার যা প্রয়োজন সবকিছু করে: shouts.jeffkreeftmeijer.com/2014/…