gpt4 book ai didi

vector - 方案:如何从向量中删除/移除元素

转载 作者:行者123 更新时间:2023-12-04 05:22:13 26 4
gpt4 key购买 nike

我正在为 Gimp script-fu 制定方案,但我没有找到一种简单的方法来从向量中删除项目。

我唯一的解决办法是:

  • 将向量转换为列表
  • 从列表中删除项目(http://stackoverflow.com/questions/1905222/how-to-delete-an-element-from-a-list-in-scheme)
  • 将列表转换为向量

  • 这是更简单的方法吗?

    这是我的代码:
    (set! myvector (list->vector (delete item (vector->list myvector))))

    (define delete
    (lambda (item list)
    (cond
    ((equal? item (car list)) (cdr list))
    (else (cons (car list) (delete item (cdr list)))))))

    最佳答案

    就是这样:您需要创建一个没有需要删除元素的新向量,复制所有其他元素。但是在您的代码中,您错过了向量中不存在元素的情况,您也不需要创建中间列表,直接从向量到向量。我使用标准 Scheme 用 Racket 写了这个,它应该很容易适应 script-fu:

    (define (vector-delete vec elt)
    (let ((new-vec (if (> (vector-length vec) 0)
    (make-vector (- (vector-length vec) 1))
    (vector))))
    (define (loop i j)
    (cond ((= i (vector-length vec))
    new-vec)
    ((equal? (vector-ref vec i) elt)
    (loop (+ i 1) j))
    ((< j (vector-length new-vec))
    (vector-set! new-vec j (vector-ref vec i))
    (loop (+ i 1) (+ j 1)))
    (else vec)))
    (loop 0 0)))

    像这样使用它:
    (define myvector #(1 2 3))
    (set! myvector (vector-delete myvector 3))
    myvector
    => '#(1 2)

    关于vector - 方案:如何从向量中删除/移除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581702/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com