【问题标题】:How to create subblock inside block with Rebol如何使用 Rebol 在块内创建子块
【发布时间】:2017-09-17 10:07:59
【问题描述】:

我想得到

[["1" "a"] ["2" "b"]] 

来自

["1" "" "a" "2" "" "b"]

什么是正确和最优雅的方式?我试过了,但没有得到我想要的结果:

block: ["1" "" "a" "2" "" "b"]

new-block: []
sub-block: []

foreach [first second third] block [
  sub-block: []
  append sub-block first
  append sub-block third
  append new-block sub-block
] 

【问题讨论】:

    标签: rebol


    【解决方案1】:
    foreach [a b c] block [repend/only [] [a c]]
    

    【讨论】:

      【解决方案2】:
      newblock: copy [] forskip block 3 [repend/only newblock [block/1 block/3 ]]
      == [["1" "a"] ["2" "b"]]
      

      【讨论】:

        【解决方案3】:

        另一种方法是使用COLLECT/KEEP

        collect [
            foreach [first second third] block [
                keep/only collect [
                    keep first
                    keep third
                ]
            ]
        ]
        

        【讨论】:

        • +1 收藏。这是另一个变体:collect [foreach [first second third] block [keep/only reduce [first third]]]
        • @draegtun 我想我会在这个例子中全押 COLLECT :)
        【解决方案4】:

        另一种不太优雅的方法是:

        >> parse ["1" "" "a" "2" "" "b"] [
                 2 [set a string! skip set b string!
                    (append x: [] reduce [a b])
                 ]
           ]
        >> x
        == ["1" "a" "2" "b"]
        

        【讨论】:

          【解决方案5】:

          更多种类,这里有一个使用MAP-EACH的解决方案

          map-each [first second third] block [reduce [first third]]
          

          注意。以上作品在 Rebol (2 & 3)。 MAP-EACH 目前没有红色版本。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-06-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-08-07
            相关资源
            最近更新 更多