Angenommen, ich habe diesen Bereich:Rubin erhält n-ten Element aus dem massiven Bereich
("aaaaa".."zzzzz")
Wie würde ich das N-te Element aus dem Bereich erhalten, ohne die ganze Sache vor der Hand/jedes Mal zu erzeugen?
Angenommen, ich habe diesen Bereich:Rubin erhält n-ten Element aus dem massiven Bereich
("aaaaa".."zzzzz")
Wie würde ich das N-te Element aus dem Bereich erhalten, ohne die ganze Sache vor der Hand/jedes Mal zu erzeugen?
Aufzählen nur n up,
oder
eine Funktion entwickeln, die eine Nummer n, f (n) gibt Ihnen die Punkt Ihrer Auswahl möglicher Lösungen.
In Ihrem Fall können Sie Ihre Reichweite als ein Zahlensystem mit Basis 26 behandeln. Das Rebasting einer Nummer ist ein bekanntes Problem. Es gibt eine example on my site, um von einer Base-10-Nummer zu einer Base-26-Nummer (dargestellt durch das Alphabet) selbst in Ruby (von einem meiner Kollegen) zu gehen. Eine Variation dieses Algorithmus würde wahrscheinlich auch für Sie funktionieren.
aktualisieren Vielleicht hat es nicht sinken, dass dies Ihre Antwort: D
Hier ist der Ruby-Code der n-ten Element des Bereichs zu erhalten:
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
dann können Sie verwenden Es ist so.
irb(main):030:0> rbase(789).rjust(10,'a')
=> "aaaaaaabej"
Eine schnelle und einfache Art und Weise:
("aaaaa".."zzzzz").first(42).last # ==> "aaabp"
Wenn aus irgendeinem Grund Sie diese über zu tun haben, und über, oder wenn Sie den Aufbau der Zwischenmatrix für die ersten N Elemente zu vermeiden, müssen Sie etwas schreiben könnte wie:
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"
Anmerkung: ich nehme an, Sie eine Lösung wollen, die für jede Enumerable, nicht für Buchstabenbereich arbeitet (in diesem Fall sollten Sie es direkt berechnen). Ich bin auch davon Ruby-1.8.7+, sonst aktualisieren oder require "backports"
Ich wusste nicht über '['list']. Zuerst (n)' ... das ist super! – Pete
Wozu genau benötigen Sie dies? Versuchen Sie, eine zufällige Zeichenfolge zu generieren? –