# \[Feature:1.9\] Enumerable#uniq

**URL:** <https://www.ruby-forum.com/t/feature-1-9-enumerable-uniq/160259>\
**Category:** Development\
**Created:** [February 13, 2009, 2:19pm UTC](https://www.ruby-forum.com/t/feature-1-9-enumerable-uniq/160259 "2009-02-13T14:19:12Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [February 13, 2009, 2:19pm UTC](https://www.ruby-forum.com/t/feature-1-9-enumerable-uniq/160259/1 "2009-02-13T14:19:12Z")

</div>

e$B$J$+$@$G$9!#e(B

Arraye$B$@$1$G$J$/!“e(BEnumerablee$B$K$be(Buniqe$B$,$”$C$F$b$$$$$s$8$c$J$$$G$7$ge(B  
e$B$&$+!#e(B

# Index: enum.c

— enum.c (revision 22100)  
+++ enum.c (working copy)  
@@ -1794,4 +1794,29 @@ enum\_cycle(int argc, VALUE \*argv, VALUE  
}

+static VALUE  
+enum\_uniq\_i(VALUE i, VALUE hash, int argc, VALUE \*argv)  
+{

- return rb\_hash\_aset(hash, i, Qtrue);  
+}
- 

+static int  
+push\_key(st\_data\_t key, st\_data\_t val, st\_data\_t ary)  
+{

- rb\_ary\_push((VALUE)ary, (VALUE)key);
- return ST\_DELETE;  
+}
- 

+static VALUE  
+enum\_uniq(VALUE obj)  
+{

- VALUE hash = rb\_hash\_new(), uniq;
- 
- RBASIC(hash)-\>klass = 0;
- rb\_block\_call(obj, id\_each, 0, 0, enum\_uniq\_i, hash);
- uniq = rb\_ary\_new2(RHASH\_SIZE(hash));
- st\_foreach(RHASH\_TBL(hash), push\_key, uniq);
- return uniq;  
+}
- 

/\*

- The `Enumerable` mixin provides collection classes with  
@@ -1853,4 +1878,5 @@ Init\_Enumerable(void)  
rb\_define\_method(rb\_mEnumerable, “drop\_while”, enum\_drop\_while, 0);  
rb\_define\_method(rb\_mEnumerable, “cycle”, enum\_cycle, -1);

- rb\_define\_method(rb\_mEnumerable, “uniq”, enum\_uniq, 0);

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [February 14, 2009, 2:01am UTC](https://www.ruby-forum.com/t/feature-1-9-enumerable-uniq/160259/2 "2009-02-14T02:01:13Z")

</div>

e$B1sF#$G$9!#e(B

2009/02/13 22:17 Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> e$B$J$+$@$G$9!#e(B
> 
> Arraye$B$@$1$G$J$/!“e(BEnumerablee$B$K$be(Buniqe$B$,$”$C$F$b$$$$$s$8$c$J$$$G$7$ge(B  
> e$B$&$+!#e(B

e$B;d$b$$$$$H;W$$$^$9!#e(B  
e$BJX\>h$G$9$,!"e(BEnumerable#compact e$B$b$[$7$$$G$9!#e(B

# Index: enum.c

— enum.c (revision 22297)  
+++ enum.c (working copy)  
@@ -1793,6 +1793,32 @@  
return Qnil; /\* not reached \*/  
}

+static VALUE  
+compact\_i(VALUE i, VALUE ary, int argc, VALUE \*argv)  
+{

- VALUE val = enum\_values\_pack(argc, argv);
- if (!NIL\_P(val)) rb\_ary\_push(ary, val);
- return Qnil;  
+}
- 

+/\*

- 
  - call-seq:

- 
  - 

```
enum.compact -> array

```

- 
  - 

- 
  - Returns an array containing the items in _enum_ with all +nil+

- 
  - elements removed.

- 
  - 

- 
  - 

```
["a", nil, "b", nil, "c"].to_enum.compact #=> [ "a", "b", "c" 

```

]

- \*/
- 

+static VALUE  
+enum\_compact(VALUE obj)  
+{

- VALUE ary = rb\_ary\_new();
- rb\_block\_call(obj, id\_each, 0, 0, compact\_i, ary);
- return ary;  
+}
- 

/\*

- The `Enumerable` mixin provides collection classes with
- several traversal and searching methods, and with the ability to  
@@ -1852,6 +1878,7 @@  
rb\_define\_method(rb\_mEnumerable, “drop”, enum\_drop, 1);  
rb\_define\_method(rb\_mEnumerable, “drop\_while”, enum\_drop\_while, 0);  
rb\_define\_method(rb\_mEnumerable, “cycle”, enum\_cycle, -1);

- rb\_define\_method(rb\_mEnumerable, “compact”, enum\_compact, 0);

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [February 14, 2009, 3:06am UTC](https://www.ruby-forum.com/t/feature-1-9-enumerable-uniq/160259/3 "2009-02-14T03:06:44Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:38002] Re: [Feature:1.9] Enumerable#uniq”  
on Sat, 14 Feb 2009 09:59:14 +0900, Yusuke ENDOH [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|e$BJX\>h$G$9$,!"e(BEnumerable#compact e$B$b$[$7$$$G$9!#e(B

uniqe$BF1MM!“A4FI$_9~$_$,I,MW$J%a%=%C%I$rA}$d$9$N$O$”$^$j;?@.$7e(B  
e$B$^$;$s!#e(B

Enumeratore$B$rJV$9e(Bcompacte$B$G$“$l$P$b$7$+$7$?$i2ACM$,$”$k$+$b$7e(B  
e$B$l$^$;$s!#$1$I!“e(BArraye$B$HLa$jCM$,0c$&$N$ONI$/$J$$$+$b$7$l$^$;e(B  
e$B$s$M$(!#e(BLazyArraye$B$N$h$&$J$b$N$,$”$l$P$h$$$N$+$J!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [February 14, 2009, 3:02am UTC](https://www.ruby-forum.com/t/feature-1-9-enumerable-uniq/160259/4 "2009-02-14T03:02:37Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:37997] [Feature:1.9] Enumerable#uniq”  
on Fri, 13 Feb 2009 22:17:21 +0900, Nobuyoshi N.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|Arraye$B$@$1$G$J$/!“e(BEnumerablee$B$K$be(Buniqe$B$,$”$C$F$b$$$$$s$8$c$J$$$G$7$ge(B  
|e$B$&$+!#e(B

Enumerablee$B$OM-8B$NJ]\>Z$,$J$$$N$GA4FI$_9~$_$,I,MW$J%a%=%C%I$re(B  
e$B$3$l0J\>eA}$d$9$N$O$I$&$+$H;W$$$^$9!#$b$&$9$G$K$"$k$N$O:o$l$Je(B  
e$B$$$K$7$F$b!#e(B
