2016-10-11 48 views
2
data =: '"MARY","PATRICIA","LINDA","BARBARA","ELIZABETH"` 

    ];._1 data 
MARY  
,   
PATRICIA 
,   
LINDA  
,   
BARBARA 
,   
ELIZABETH 
(one more blank line here) 

,所以我想就跳過每一個下聯:如何在構建新列表時跳過元素?

]`(0&#);._1 data 
MARY  

PATRICIA 

LINDA  

BARBARA 

ELIZABETH 
(one more blank line here) 

,因爲我以爲不工作。
我經常遇到這種情況。在使用例如這樣的代碼:

]`(Do nothing. Just skip. Just SKIP!!!)@.(some condition) 
+0

這聞起來像一個XY問題。解析一串逗號分隔值,你正在嘗試做什麼?或者你是否想要獲得數組的每一行?或者是其他東西?例如,'0 2 4 6 8 {array'會爲你提供行,但這可能不是你正在尋找的答案。 – Dane

+0

最初我想解析字符串。但後來它成爲更普遍問題的一個例子。 – Roman

+2

@roman,作爲@bob提示,使用'#','{'或'^:'選擇元素更適合您的想法。使用'v @。 c'意味着你必須對所有輸入元素執行_something_操作。 'v ^:c'更接近。 – Eelvex

回答

2

你可以做這種方式,通過附加,','(重要的是,這是一個列表,而不是原子)除去最後的LF,然後用切割;.再此之後時間基於最終值。

(];._2) @: ((,','),~ }:) @: (];._1) data 

MARY  

PATRICIA 

LINDA  

BARBARA 

ELIZABETH 

空行不是空白,而是形狀的僞影。

$(];._2) @: ((,','),~ }:) @: (];._1) data 
5 1 9 

插入追加,/清理這件事

,/ @: (];._2) @: ((,','),~ }:) @: (];._1) data 
    MARY  
    PATRICIA 
    LINDA  
    BARBARA 
    ELIZABETH 
     $,/ @: (];._2) @: ((,','),~ }:) @: (];._1) data 
    5 9 

這並不能真正解決你的「什麼都不做」的問題與跳繩,但有諷刺在想什麼也不做,同時希望跳過!跳繩會做點什麼,不是嗎?這可能表明另一種方法,如複製#可能會比議程@.更好,但人們必須知道具體情況。

0

,如果你想跳過列表的每個第二個元素,你可以使用(_2 {.\ ])

換句話說:打破名單成兩種,讓每對的第一個元素。

0

幾個選項來過濾掉列表的每個第二個元素:

mylist=: ];._1 data 
    (#~ 2 [email protected]| [email protected]#) mylist NB. retain even indexed items 
MARY  
PATRICIA 
LINDA  
BARBARA 
ELIZABETH 
    (_2 {.\ ]) mylist   NB. get first item of pairs 
MARY  
PATRICIA 
LINDA  
BARBARA 
ELIZABETH 

幾個選項來解析這些數據:

> '","' splitstring }. }: data 
MARY  
PATRICIA 
LINDA  
BARBARA 
ELIZABETH 

    require 'csv' 
    > (',' ; '"') fixdsv data,LF 
MARY  
PATRICIA 
LINDA  
BARBARA 
ELIZABETH