मान लीजिए मैं इस श्रृंखला है:रूबी बड़े पैमाने पर सीमा से n वें आइटम मिल
("aaaaa".."zzzzz")
मैंने पहले हाथ/हर बार पूरे बात पैदा करने के बिना सीमा से वां आइटम कैसे प्राप्त होगा?
मान लीजिए मैं इस श्रृंखला है:रूबी बड़े पैमाने पर सीमा से n वें आइटम मिल
("aaaaa".."zzzzz")
मैंने पहले हाथ/हर बार पूरे बात पैदा करने के बिना सीमा से वां आइटम कैसे प्राप्त होगा?
की गणना केवल n करने के लिए,
या
उन्नयन या एक समारोह है कि एक संख्या n, च दिए गए विकास (एन) आप देता है संभावित समाधान की अपनी सीमा का nth आइटम।
अपने मामले में आप अपनी सीमा को आधार 26 के साथ एक संख्या प्रणाली के रूप में देख सकते हैं। किसी संख्या को दोबारा एक अच्छी तरह से ज्ञात समस्या है। आधार -10 संख्या से आधार -26 संख्या (वर्णमाला द्वारा दर्शाया गया) तक रूबी (मेरा एक सहयोगी द्वारा निर्मित) में जाने के लिए example on my site है। इस एल्गोरिदम की कुछ भिन्नता शायद आपके लिए भी काम करेगी।
अद्यतन शायद यह सिंक नहीं किया है कि यह आपके जवाब है: डी
यहाँ अपने रेंज के n वें आइटम प्राप्त करने के लिए गहरे लाल रंग का कोड है:
def rbase(value)
a = ('a'..'z')
b = a.to_a
base = b.length
text = []
begin
value, rest = value.divmod(base)
text << b[rest]
end until value.zero?
text.reverse.join
end
तो आप उपयोग कर सकते हैं ऐसा ही है।
irb(main):030:0> rbase(789).rjust(10,'a')
=> "aaaaaaabej"
एक त्वरित और आसान तरीका:
("aaaaa".."zzzzz").first(42).last # ==> "aaabp"
किसी कारण से आप अधिक से अधिक यह करने के लिए है, तो या यदि आप पहले एन तत्वों के लिए मध्यवर्ती सरणी के निर्माण से बचने की जरूरत है, तो आप कुछ लिख सकता है जैसे:
module Enumerable
def skip(n)
return to_enum :skip, n unless block_given?
each_with_index do |item, index|
yield item unless index < n
end
self
end
end
("aaaaa".."zzzzz").skip(41).first # ==> "aaabp"
नोट: मैं तुम्हें एक समाधान है कि किसी भी Enumerable के लिए काम करता है, पत्र की श्रृंखला के लिए नहीं करना चाहता संभालने कर रहा हूँ (इस स्थिति में आप इसे सीधे गणना चाहिए)। मैं भी रूबी 1.8.7+ संभालने हूँ, अन्यथा require "backports"
मुझे '['list'] के बारे में पता नहीं था। पहले (एन)' ... यह कमाल है! – Pete
आपको इसका उपयोग करने के लिए वास्तव में क्या आवश्यकता है? क्या आप एक यादृच्छिक स्ट्रिंग उत्पन्न करने की कोशिश कर रहे हैं? –