【问题标题】:How do I delete colons (:) in my lists?如何删除列表中的冒号 (:)?
【发布时间】:2015-12-13 21:16:11
【问题描述】:

我开始学习球拍。有一个关于时间的示例,我需要从列表中删除冒号 (:)。例如;

11:30 -> 1130

我想这样做,因为我会把它们按第一、第二、第三和第四的顺序排列。

P.S.:对不起我的英语。

【问题讨论】:

  • @samoth 首先,我写它 (define (check L) (for ([i (in-range 0 (length L))]) (remove : L) ) (display L) ) (检查(列表 22:30 22:31))
  • 我不明白输出和输入的关系。 1) 您的问题要求删除冒号,但它们出现在您的输出中 2) 输入和输出之间似乎没有相关性。为什么有些时候完全被排除在输出之外? 3) "14:30" 出现在输出中,但不是输入。
  • @naomik 是的,你是对的。这是无关紧要的,我更正了。

标签: scheme racket


【解决方案1】:
(define L (list "22:30"))

(string-append (substring (first L) 0 2) (substring (first L) 3 5))

输出:“2230”

【讨论】:

    【解决方案2】:

    试试这个:

    (string-replace "11:30" ":" "")
    

    如果您需要对数字进行处理,您可以将字符串转换为数字或数字列表。它是这样的:

    ;; convert a string into an integer 
    (define S (string->number (string-replace "11:30" ":" "")))
    
    ;; produce a list of digits from a given integer
    (define (int->list n) 
      (cond [(zero? n) empty]
            [else
             (append (int->list (quotient n 10))
                 (list (remainder n 10)))]))
    
    ;; try it in REPL
    > (int->list S)
    '(1 1 3 0)
    

    【讨论】:

    • 尝试使用cons 而不是append;如有必要,您始终可以reverse 结果。这是一个令人难以置信的性能提升器,让你的代码看起来更专业;-)
    • 当然,当性能很重要时,我确实在我的代码中使用它以及尾递归。但是在这个只有四元素列表的示例代码中,即使使用分析工具,您可能也不会注意到性能上有任何差异,对吗?以性能为重点,我可能会使用标准库中的 string->list 重写整个内容,具体取决于 OP 的需要。后者正是问题所在,因为不清楚 OP 试图用这串数字做什么。
    猜你喜欢
    • 1970-01-01
    • 2020-08-01
    • 2017-11-07
    • 2021-04-13
    • 2017-01-08
    • 1970-01-01
    • 2022-01-06
    • 2018-09-22
    • 1970-01-01
    相关资源
    最近更新 更多