Re: Index of an element in a vector of vectors

2016-12-10 Thread Tyler Perkins
Don't know what you mean about "swapping", but here's a solution that 
generalizes to a tree of any finite depth, where each node is either a leaf 
element or a seqable (say, a vector) of any length:

(defn coord-of

  ([elems target]
   (coord-of elems target []))

  ([elems target indexes]
   (first (keep-indexed
(fn [i x]
  (cond
(= x target)  (conj indexes i)
(seqable? x)  (coord-of x target (conj indexes i
elems

Then, for example,

cljs.user=> (coord-of [[] 11 [1 2 3] [4 5 6]] 5)
[3 1]
cljs.user=> (coord-of [[] 11 [1 2 3] [4 5 6]] 55)
nil

-- 
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/d/optout.


Re: Index of an element in a vector of vectors

2016-12-08 Thread Andy-
In that case you can use mapv:

(mapv
  (fn [xs]
(mapv
  (fn [x]
(if (= x "5")
  "XX"
  x))
  xs))
  players)


Two notes:
1. There is room for optimization if you only want to map one element. This 
currently will just keep going. A smart implementation could bail out of 
the inner loop
2. If this is something you want to do frequently you may want to use 
different data structures (probably a map) that allow you to access 
elements fast.

If you sketch your access and transform patterns then I'm sure we can 
recommend a better way.



On Thursday, December 8, 2016 at 11:13:42 AM UTC+1, Rickesh Bedia wrote:
>
> Is there a way to generalise?
>
> I.e a function that allows you to swap any of the 1-9?
>
> On Wednesday, 7 December 2016 18:06:19 UTC, Andy- wrote:
>>
>> One option is to use keep-indexed:
>>
>> (first
>>   (keep-indexed
>> (fn [i xs]
>>   (first
>> (keep-indexed
>>   (fn [j x]
>> (when (= x "5")
>>   [i j]))
>>   xs)))
>> players))
>>
>>
>>
>> On Wednesday, December 7, 2016 at 5:32:10 PM UTC+1, Rickesh Bedia wrote:
>>>
>>> If I have 
>>>
>>> (def players [["1" "2" "3"] ["4" "5" "6"] ["7" "8" "9"]])
>>>
>>> How would I get the index of number 5? I think it should be [1 1] but 
>>> don't know how to get this
>>>
>>> If it were more simple such as
>>>
>>> (def players ["1" "2" "3"])
>>>
>>> I can get the index using
>>>
>>> (.indexOf players "2") > 1
>>> (.indexOf players "3") > 2
>>>
>>>

-- 
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/d/optout.


Re: Index of an element in a vector of vectors

2016-12-08 Thread 'Rickesh Bedia' via Clojure
Is there a way to generalise?

I.e a function that allows you to swap any of the 1-9?

On Wednesday, 7 December 2016 18:06:19 UTC, Andy- wrote:
>
> One option is to use keep-indexed:
>
> (first
>   (keep-indexed
> (fn [i xs]
>   (first
> (keep-indexed
>   (fn [j x]
> (when (= x "5")
>   [i j]))
>   xs)))
> players))
>
>
>
> On Wednesday, December 7, 2016 at 5:32:10 PM UTC+1, Rickesh Bedia wrote:
>>
>> If I have 
>>
>> (def players [["1" "2" "3"] ["4" "5" "6"] ["7" "8" "9"]])
>>
>> How would I get the index of number 5? I think it should be [1 1] but 
>> don't know how to get this
>>
>> If it were more simple such as
>>
>> (def players ["1" "2" "3"])
>>
>> I can get the index using
>>
>> (.indexOf players "2") > 1
>> (.indexOf players "3") > 2
>>
>>

-- 
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/d/optout.


Re: Index of an element in a vector of vectors

2016-12-07 Thread Andy-
One option is to use keep-indexed:

(first
  (keep-indexed
(fn [i xs]
  (first
(keep-indexed
  (fn [j x]
(when (= x "5")
  [i j]))
  xs)))
players))



On Wednesday, December 7, 2016 at 5:32:10 PM UTC+1, Rickesh Bedia wrote:
>
> If I have 
>
> (def players [["1" "2" "3"] ["4" "5" "6"] ["7" "8" "9"]])
>
> How would I get the index of number 5? I think it should be [1 1] but 
> don't know how to get this
>
> If it were more simple such as
>
> (def players ["1" "2" "3"])
>
> I can get the index using
>
> (.indexOf players "2") > 1
> (.indexOf players "3") > 2
>
>

-- 
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/d/optout.


Index of an element in a vector of vectors

2016-12-07 Thread 'Rickesh Bedia' via Clojure
If I have 

(def players [["1" "2" "3"] ["4" "5" "6"] ["7" "8" "9"]])

How would I get the index of number 5? I think it should be [1 1] but don't 
know how to get this

If it were more simple such as

(def players ["1" "2" "3"])

I can get the index using

(.indexOf players "2") > 1
(.indexOf players "3") > 2

-- 
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/d/optout.