をカウントします頻度または項目でソートすることができます。elispの実装では、ユニークなライン
答えて
一般的な方法は、文字列をハッシュしてから内容を印刷することです。このアプローチは、emacsで簡単に行うことができます。
;; See the emacs manual for creating a hash table test
;; https://www.gnu.org/software/emacs/manual/html_node/elisp/Defining-Hash.html
(defun case-fold-string= (a b)
(eq t (compare-strings a nil nil b nil nil t)))
(defun case-fold-string-hash (a)
(sxhash (upcase a)))
(define-hash-table-test 'case-fold
'case-fold-string= 'case-fold-string-hash)
(defun uniq (beg end)
"Print counts of strings in region."
(interactive "r")
(let ((h (make-hash-table :test 'case-fold))
(lst (split-string (buffer-substring-no-properties beg end) "\n"
'omit-nulls " "))
(output-func (if current-prefix-arg 'insert 'princ)))
(dolist (str lst)
(puthash str (1+ (gethash str h 0)) h))
(maphash (lambda (key val)
(apply output-func (list (format "%d: %s\n" val key))))
h)))
出力そのテキストを選択
4: flower
1: park
3: stone
素敵で速い、これ。あなたがそのヌル・ヌルとライン・トリミングの振る舞いを望んでいるかどうか確信していませんか? – phils
私は 'maphash'シーケンスが未定義であると思いますか? – phils
@philsキー/値によるソートが必要だった場合は、maphash関数に '(push(cons val key)result)'と '(cl-sort results# '>:key#')カー) 'after – jenesaisquoi
bashの
uniq -c
と似ています。
なぜuniq -c
を使用しないのですか?
領域が強調表示されている場合、M-| "sort | uniq -c"
は、現在の領域でそのコマンドを実行します。結果はミニバッファに表示され、* Messages * bufferにリストされます。プレフィックスargを追加すると、結果が現在のバッファに挿入されます。
' uniq -c'はネイティブ環境によっては利用できません。それが質問の全理由です。 – aartist
私はあなたがこれに取ることができるのアプローチがたくさんあると仮定します。これはかなり単純なアプローチです:
(defun uniq-c (beginning end)
"Like M-| uniq -c"
(interactive "r")
(let ((source (current-buffer))
(dest (generate-new-buffer "*uniq-c*"))
(case-fold-search nil))
(set-buffer dest)
(insert-buffer-substring source beginning end)
(goto-char (point-min))
(while (let* ((line (buffer-substring (line-beginning-position)
(line-end-position)))
(pattern (concat "^" (regexp-quote line) "$"))
(count (count-matches pattern (point) (point-max))))
(insert (format "%d " count))
(forward-line 1)
(flush-lines pattern)
(not (eobp))))
(pop-to-buffer dest)))
- 1. ユニークな引数は実体では
- 2. テトリスのエイリアス/ elispファイルの実行
- 3. は私が<strong>HTMLテーブル</strong>を実装するユニークな方法
- 4. elispの
- 5. Emacsのないelispプログラムを実行しますか?
- 6. C++ 11/14ユニークなポインタではないユニークなポインタですか?
- 7. Elispデバッガがポップアップしない
- 8. PHPのシンプルなラインは、私はWordpressのにこのコードを実装しようとしていますWordpressの
- 9. Emacs elispのデフォルトヘルプドキュメント
- 10. emacs/elispのbignum
- 11. 実際にラインでVBA
- 12. ナビゲーション実験:ユニークなアイテムのみをスタック
- 13. は - ユニークな行
- 14. 単純な実装では、インタビューで
- 15. だから、elispの
- 16. elispの変数バインド
- 17. elisp/emacsのrpcサーバ
- 18. Elispのフィルター関数
- 19. カントはユニークなフィールドです!
- 20. jQueryユニークではない
- 21. South:NULLでないユニークな列のマイグレーションを実行
- 22. ユニットテスト関数elisp
- 23. シンプルなラインは、Java
- 24. これは、SelectionSortの実装が可能な実装であれば、Selection Sort
- 25. スレッドセーフな実装
- 26. Byte CMakeでelispファイルをコンパイル
- 27. 静的な実装では、Java
- 28. UILabelは私のラベルはラインを破っていないライン
- 29. バリデーションテンプレートクラス:バリアントテンプレート引数ごとに1つのユニークなメンバ関数を実装できますか?
- 30. ユニークなインデックスへのユニークでないインデックスの変更
番号count-matchesは単一項目をカウントしています。 'uniq -c'はリスト内の複数の項目をカウントします。 – aartist