diff scripts/set/unique.m @ 5205:59592dcbb5d8

[project @ 2005-03-15 16:04:56 by jwe]
author jwe
date Tue, 15 Mar 2005 16:04:57 +0000
parents 912058eb8360
children 4c8a2e4e0717
line wrap: on
line diff
--- a/scripts/set/unique.m	Tue Mar 15 05:07:15 2005 +0000
+++ b/scripts/set/unique.m	Tue Mar 15 16:04:57 2005 +0000
@@ -60,7 +60,14 @@
 
   if (nargin == 2)
     [y, i] = sortrows (y);
-    match = all ((y(1:n-1,:) == y(2:n,:))');
+    if (iscell (y))
+      match = cellfun ("size", y(1:n-1,:), 1) == cellfun ("size", y(2:n,:), 1);
+      idx = find (match);
+      match(idx) = all (char (y(idx)) == char (y(idx+1)), 2);
+      match = all (match');
+    else
+      match = all ([y(1:n-1,:) == y(2:n,:)]');
+    endif
     idx = find (match);
     y(idx,:) = [];
   else
@@ -68,7 +75,13 @@
       y = y(:);
     endif
     [y, i] = sort (y);
-    match = y(1:n-1) == y(2:n);
+    if (iscell (y))
+      match = cellfun ("length", y(1:n-1)) == cellfun ("length", y(2:n));
+      idx = find(match);
+      match(idx) = all (char (y(idx)) == char (y(idx+1)), 2);
+    else
+      match = [y(1:n-1) == y(2:n)];
+    endif
     idx = find (match);
     y(idx) = [];
   endif
@@ -94,3 +107,5 @@
 %!assert(unique([1 2]),[1 2])
 %!assert(unique([1;2]),[1;2])
 %!assert(unique([1,NaN,Inf,NaN,Inf]),[1,Inf,NaN,NaN])
+%!assert(unique({'Foo','Bar','Foo'}),{'Bar','Foo'})
+%!assert(unique({'Foo','Bar','FooBar'}),{'Bar','Foo','FooBar'})