Forum: Ruby uniuq no

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Vetrivel V. (Guest)
on 2009-02-14 11:21
I want to create new unique id in ruby.I have used the following
coding.But I don''t know whether it works perfectly or not.

 t = Time.new
 p "%10.5f" % t.to_f

does it give unique value always.I you know some other way ,please say
to create unique id .
7stud -. (Guest)
on 2009-02-14 11:41
Vetrivel V. wrote:
> I want to create new unique id in ruby.I have used the following
> coding.But I don''t know whether it works perfectly or not.
>
>  t = Time.new
>  p "%10.5f" % t.to_f
>
> does it give unique value always.

This might be better:

d = Time.new
t = d.to_f
puts t

r = rand
puts r

p_id = $$
puts p_id

new_id = t + 10000000 * r + 10000000 * p_id
p new_id
Raphael C. (Guest)
on 2009-02-14 17:21
7stud -- wrote:
> Vetrivel V. wrote:
>> I want to create new unique id in ruby.I have used the following
>> coding.But I don''t know whether it works perfectly or not.
>>
>>  t = Time.new
>>  p "%10.5f" % t.to_f
>>
>> does it give unique value always.
>
> This might be better:
>
> d = Time.new
> t = d.to_f
> puts t
>
> r = rand
> puts r
>
> p_id = $$
> puts p_id
>
> new_id = t + 10000000 * r + 10000000 * p_id
> p new_id

Be a little careful with this, floats are not very precise, (see:
http://www.ruby-forum.com/topic/178503 ) and this could lead to some
duplication.

irb(main):001:0> a = (10.12 * 100).to_i
=> 1011
irb(main):002:0> b = (10.11 * 100).to_i
=> 1011
irb(main):003:0> a == b
=> true

While this really shouldn't be a problem with this scheme, big decimal
might be safer...

(see:
http://www.ruby-doc.org/stdlib/libdoc/bigdecimal/r...
)
Julian L. (Guest)
on 2009-02-14 17:23
(Received via mailing list)
Time.new.to_i.to_s<<rand.to_s

Blog: http://random8.zenunit.com/
Learn rails: http://sensei.zenunit.com/

On 14/02/2009, at 8:19 PM, Vetrivel V.
Raphael C. (Guest)
on 2009-02-14 18:07
Vetrivel V. wrote:
> I want to create new unique id in ruby.I have used the following
> coding.But I don''t know whether it works perfectly or not.
>
>  t = Time.new
>  p "%10.5f" % t.to_f
>
> does it give unique value always.I you know some other way ,please say
> to create unique id .

How about something like this...
count = 0
t = Time.now.to_s
10000.times {
  if( t == Time.now.to_s)
    count = count + 1
  else
    count = 0
    t = Time.now.to_s
  end
  uniqid = t + "." + count.to_s
  puts uniqid
}

That way you don't have to worry about rounding, or the possibility that
the same random number might come up twice. The only real problem with
this scheme is that on a very fast computer it might be possible to
generate more ids each second than will fit in an Int. But, Bignum might
be able to help there...
Lars H. (Guest)
on 2009-02-25 16:16
(Received via mailing list)
* Vetrivel V. <removed_email_address@domain.invalid> wrote:
>
> I want to create new unique id in ruby.I have used the following
> coding.But I don''t know whether it works perfectly or not.
>
>  t = Time.new
>  p "%10.5f" % t.to_f
>
> does it give unique value always.I you know some other way ,please say
> to create unique id .

UUID┬╣ is a standard way of constructing unique identifiers, and a Ruby
library┬▓ exist already, so unless you require the identifiers to be
integers, I suggest you use that.

[1] http://en.wikipedia.org/wiki/UUID
[2] http://wiki.github.com/assaf/uuid

--
Lars H.

"If anyone disagrees with anything I say, I am quite prepared not only
to
 retract it, but also to deny under oath that I ever said it." -Tom
Lehrer
Florian G. (Guest)
on 2009-02-25 17:43
(Received via mailing list)
On Feb 25, 2009, at 3:14 PM, Lars H. wrote:

>> to create unique id .
>
> "If anyone disagrees with anything I say, I am quite prepared not
> only to
> retract it, but also to deny under oath that I ever said it." -Tom
> Lehrer
>

UUIDs can also be notated in an integer representation. It's just a
bit long.

There are multiple libraries, this example uses the gem uuidtools:

 >> UUID.timestamp_create.to_i
227941543066369752189048382045440381927

They are the best way to choose.

Regards,
Florian

--
Florian G.

smtp:   removed_email_address@domain.invalid
jabber: removed_email_address@domain.invalid
gpg:    533148E2
This topic is locked and can not be replied to.