2010-04-28 13 views
5

मान लीजिए मैं इस श्रृंखला है:रूबी बड़े पैमाने पर सीमा से n वें आइटम मिल

("aaaaa".."zzzzz") 

मैंने पहले हाथ/हर बार पूरे बात पैदा करने के बिना सीमा से वां आइटम कैसे प्राप्त होगा?

+0

आपको इसका उपयोग करने के लिए वास्तव में क्या आवश्यकता है? क्या आप एक यादृच्छिक स्ट्रिंग उत्पन्न करने की कोशिश कर रहे हैं? –

उत्तर

1

की गणना केवल 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" 
8

एक त्वरित और आसान तरीका:

("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"

+0

मुझे '['list'] के बारे में पता नहीं था। पहले (एन)' ... यह कमाल है! – Pete

संबंधित मुद्दे