The missing context is that distinct removes duplicates, I want duplicates to 
be made unique by changing them in some way: (uniquify ["a" "b" "c" "a"]) => 
["a" "b" "c" "a_1"]) *not* (uniquify ["a" "b" "c" "a"]) => ["a" "b" "c"])
Not sure what else to put that isn't in the original post to be honest...

Date: Fri, 10 Jan 2014 07:10:22 -0800
Subject: Re: How can I improve this?
From: grd...@gmail.com
To: clojure@googlegroups.com

Hi Colin,
Clojure has a distinct function that does this. I may be missing some context 
on what you what out of your new method that 'distinct' does not provide. The 
distinct functions source code is a good reference.

Thanks

On Fri, Jan 10, 2014 at 6:59 AM, Colin Yates <colin.ya...@gmail.com> wrote:

I have a sequence of file names and I want to make them unique.  (uniquify ["a" 
"b" "c" "a"]) => ["a" "b" "c" "a_1"])

This is what I have come up with, but surely there is a better way?
What would you all do?  Feedback welcome (including the word 'muppet' as I am 
sure I have missed something simple) :)

(defn uniquify  "Return a sequence, in the same order as s containing every 
element  of s. If s (which is presumed to be a string) occurs more than once  
then every subsequent occurrence will be made unique.

  Items will be updated to include an incrementing numeric count using  the 
specified formatter function. The formatter function will be  given the name 
and the number and should return a combination of the
  two.
  The set of unique s's in the returned sequence will be the count of  s's in 
s."    ([s] (uniquify s (fn [item duplicates] (str item "_" duplicates))))
  ([s formatter]     (let [occurrences (atom {})           register-occurrence 
(fn [item]                                 (if (get @occurrences item)          
                         (swap! (get @occurrences item) inc)
                                   (swap! occurrences assoc item (atom 1)))     
                            @(get @occurrences item))           process (fn 
[item]                     (let [duplicates (dec (register-occurrence item))]
                       (if (> duplicates 0)                         (formatter 
item duplicates)                         item)))           unique-s (map 
process s)]       unique-s)))





-- 

-- 

You received this message because you are subscribed to the Google

Groups "Clojure" group.

To post to this group, send email to clojure@googlegroups.com

Note that posts from new members are moderated - please be patient with your 
first post.

To unsubscribe from this group, send email to

clojure+unsubscr...@googlegroups.com

For more options, visit this group at

http://groups.google.com/group/clojure?hl=en

--- 

You received this message because you are subscribed to the Google Groups 
"Clojure" group.

To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.







-- 

-- 

You received this message because you are subscribed to the Google

Groups "Clojure" group.

To post to this group, send email to clojure@googlegroups.com

Note that posts from new members are moderated - please be patient with your 
first post.

To unsubscribe from this group, send email to

clojure+unsubscr...@googlegroups.com

For more options, visit this group at

http://groups.google.com/group/clojure?hl=en

--- 

You received this message because you are subscribed to a topic in the Google 
Groups "Clojure" group.

To unsubscribe from this topic, visit 
https://groups.google.com/d/topic/clojure/rt-l_X3gK-I/unsubscribe.

To unsubscribe from this group and all its topics, send an email to 
clojure+unsubscr...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
                                          

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to