【问题标题】:Getting values from multiple lists to one in Red language用红色语言从多个列表中获取一个值
【发布时间】:2017-09-22 07:57:17
【问题描述】:

我想将 2 个系列的值合二为一,但它不起作用:

我有两个系列:

a: [1 2 3]
b: [4 5 6 7]

我想在一个列表中获取所有值,以便我可以将它们作为 allv/1、allv/2...allv/7 访问。

以下不起作用,因为它产生了一系列系列而不是系列值:

allv:  [a b]
print allv     ; => prints all 6 values, but following do not work: 
print allv/1   ; => gives a  (desired is 1)
print allv/2   ; => gives b  (desired is 2)
print allv/3   ; => gives none (desired is 3)

我尝试了以下函数来组合一个系列中的值:

mycombine: function [ll][
    temp: []
    foreach l ll [
        repeat i length? l [
            temp: append temp l/:i ] ]
    temp]

mycombine [a b]

但上面给出了错误:

*** Script Error: length? does not allow word! for its series argument
*** Where: length?
*** Stack: rncombine 

该系列已转换为单词,无法正常工作。

我该如何解决这个问题?

【问题讨论】:

    标签: list rebol red


    【解决方案1】:

    只是追加

    a: [1 2 3]
    b: [4 5 6 7]
    c: [8 9 10]
    d: [11 12 13 14]
    >> allv: append a b
    == [1 2 3 4 5 6 7]
    >> a
    == [1 2 3 4 5 6 7]
    

    做你想做的事。但请注意,即使 a 包含所有值,因为您已将 b 的值附加到块 a。如果你想要一个新块,你必须使用

    allv: append copy a b
    

    如果你想追加更多系列,你可以这样做

    >> foreach x [a b c d] [ append [] reduce x]
    == [1 2 3 4 5 6 7 8 9 10 11 12 13 14]
    

    get x 也在工作,而不是减少。 另一种结合方式

    >> compose [(a) (b) (c)]
    == [1 2 3 4 5 6 7 8 9 10 ]
    

    【讨论】:

    • 我有可变数量的系列要组合。如果我必须将 4 个系列与每个系列中不同数量的元素结合起来怎么办?
    • 你可以随意追加,只要注意你追加的块
    • 我已将 a 和 b 组合成另一个系列,而 a 和 b 保持不变。这很重要。
    • 然后在你追加的地方使用一个新的块/系列。请参阅上面的最后两个示例。
    • 这是不同的/不推荐/不需要:allv: append copy allv copy a
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多