2014-04-08 94 views
2

我使用陣列來指定2維數組的索引試過,但pick功能將不接受的陣列作爲第二元件:如何訪問數組索引在REBOL多維數組

print pick [[3 5] [3 1]] [2 1] 

*** ERROR 
** Script error: invalid argument: [2 2] 
** Where: pick try do either either either -apply- 
** Near: pick [[3 5] [3 1]] [2 2] 

我發現這是一個解決辦法,但它是稍微詳細:

print pick pick [[3 5] [3 1]] 2 1 
[comment This prints "3".] 

是否有可能訪問多維數組的索引,而不調用pick函數多次?

回答

2

從多維數組中排除元素的更簡潔的方法是使用PATH!語法。

下面是Rebol的控制檯例如:

>> x: [[3 5] [3 1]]  
== [[3 5] [3 1]] 

>> x/2/1 
== 3 

>> x/2/2      
== 1 

>> x/1/(1 + 1)  ;; use parens for expressions - transforms to x/1/2 
== 5 

>> p: 2 
== 2 

>> x/1/:p   ;; use ":" for variable reference - transforms to x/1/2 
== 5 

>> x/(p - 1)/:p  ;; mix and match at any level of array - transforms to x/1/2 
== 5  

>> x/3    ;; NONE is returned if index does not exist 
== none 

>> x/2 
== [3 1] 

>> x/2/3   ;; again out of range 
== none 

另一種辦法是FIRSTSECOND .. TENTH功能:

>> second first [[3 5] [3 1]] 
== 5 

您甚至可以混合和匹配:

>> x: [ [[1]] [[2]] [3 [4 5]] ] 
== [[[1]] [[2]] [3 [4 5]]] 

>> first pick x/3 2 
== 4 
+0

會有任何方法在PATH中包含表達式!語法,如'x /(10 + 1)/ 3'?或'x /(3 + 4)/ 10'?我已經嘗試了這兩種方法,並且總是返回'none'。 –

+0

@AndersonGreen - 是的,你可以。我會用一些例子更新答案。 – draegtun

+0

@AndersonGreen - PS。爲了您的評論示例能夠記住空格 - 'x /(var1 + 1)'和'x /(3 + 4)'。更新 - 自我評論以來,您已經修改了您的評論!您的新示例正在返回'none',因爲這些索引超出範圍。我會將其添加到我的示例中。 – draegtun