小编Eam*_*ain的帖子

习惯性的Clojure方式找到seq中最常见的项目

给定一系列项目,我想找到n个最频繁的项目,按频率降序排列.所以例如我希望这个单元测试通过:

(fact "can find 2 most common items in a sequence"
      (most-frequent-n 2 ["a" "bb" "a" "x" "bb" "ccc" "dddd" "dddd" "bb" "dddd" "bb"]) 
      =>
      '("bb" "dddd"))
Run Code Online (Sandbox Code Playgroud)

我是Clojure的新手,仍然试图掌握标准库.这是我想出的:

(defn- sort-by-val [s]        (sort-by val s))
(defn- first-elements [pairs] (map #(get % 0) pairs))

(defn most-frequent-n [n items]
  "return the most common n items, e.g. 
     (most-frequent-n 2 [:a :b :a :d :x :b :c :d :d :b :d :b])  => 
         => (:d :b)"
  (take n (->
           items               ; [:a :b :a :d …
Run Code Online (Sandbox Code Playgroud)

idiomatic clojure

5
推荐指数
1
解决办法
1752
查看次数

int在结构中的奇怪行为

假设我们有这种结构(有史以来最简单的结构之一):

type some struct{
    I uint32
}
Run Code Online (Sandbox Code Playgroud)

我们希望有一个这种类型的变量,并在for循环中原子递增(可能在另一个goroutine,但现在故事是不同的).我做以下事情:

q := some{0}
for i := 0; i < 10; i++ {
        atomic.AddUint32(&q.I,1) // increment [1]
        fmt.Println(q.I)
}
Run Code Online (Sandbox Code Playgroud)

我们得到了我们期望的东西,到目前为止一直很好,但是如果我们为这种类型声明一个函数如下:

func (sm some) Add1(){
    atomic.AddUint32(&sm.I,1)
}
Run Code Online (Sandbox Code Playgroud)

并在上面的示例(行[1])中调用此函数,该值不会递增,我们只是得到零.问题很明显 - 为什么?

这必须是基本的东西,但由于我是新手,我没有意识到.

atomic go uint32

4
推荐指数
1
解决办法
119
查看次数

标签 统计

atomic ×1

clojure ×1

go ×1

idiomatic ×1

uint32 ×1