중첩 배열 시각화


15

중첩 배열이 제공됩니다. 프로그램은 배열을 시각화해야합니다.


그러나 .. 어떻게?

예를 들어, 같은 중첩 배열이 있다고 가정 해 봅시다 [["1","2"],[["1","2"],"3"],"4",[[[["5"]]]],"6"].

이 중첩 배열은 다음과 같이 시각화 할 수 있습니다.

->1
->2
-->1
-->2
->3
>4
---->5
>6

Input 1:
["Atom",["Proton",["Up Quark", "Up Quark", "Down Quark"], "Neutron", ["Up Quark", "Down Quark", "Down Quark"], "Electron"]]
Output 1:
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

Input 2:
[["1","2"],["3","4"]]
Output 2:
->1
->2
->3
->4

규칙

  • 문자열 (또는 중첩 배열처럼 작동하는 다른 유형)을 입력으로 사용할 수 있습니다.
  • "레이어"의 최대 레벨은 2 ^ 32-1입니다.

이 정확한 시각화가 필요합니까?
penalosa

@mnbvc 예. 강제로하지 않으면 사람들이 I / O를 많이 왜곡하기 시작합니다. 날 믿어 봐
Matthew Roh

나는 망막이 이길 것 같은 느낌.
Magic Octopus Urn

1
문자열에 나타날 수있는 문자에 대한 제한이 있습니까?
Martin Ender

추가 관련 질문 1 , 2
AdmBorkBork

답변:


12

APL, 32 바이트

{1=≡⍺:⎕←⍺,⍨⍵↑1↓⍵/'->'⋄⍺∇¨⍵+1}∘0

테스트:

      r
┌────┬─────────────────────────────────────────────────────────────────────────────────────────┐
│Atom│┌──────┬──────────────────────────────┬───────┬────────────────────────────────┬────────┐│
│    ││Proton│┌────────┬────────┬──────────┐│Neutron│┌────────┬──────────┬──────────┐│Electron││
│    ││      ││Up Quark│Up Quark│Down Quark││       ││Up Quark│Down Quark│Down Quark││        ││
│    ││      │└────────┴────────┴──────────┘│       │└────────┴──────────┴──────────┘│        ││
│    │└──────┴──────────────────────────────┴───────┴────────────────────────────────┴────────┘│
└────┴─────────────────────────────────────────────────────────────────────────────────────────┘
      {1=≡⍺:⎕←⍺,⍨⍵↑1↓⍵/'->'⋄⍺∇¨⍵+1}∘0 ⊢ r 
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

설명:

  • {... }∘0: 다음 함수를 0바인딩하여 실행합니다 .
    • 1=≡⍺:: 입력에 깊이 1이있는 경우 (즉, 다른 배열을 포함하지 않는 배열) :
      • ⍵/'->': -s와 >s를 포함하는 문자열을 만듭니다.
      • 1↓: 첫 번째 요소를 삭제하고
      • ⍵↑: 첫 번째 요소를 가져옵니다 . 결과적으로 ⍵-1대시와 하나를 포함하는 문자열이 생성됩니다 >.
      • ⍺,⍨: 입력을 추가하십시오.
      • ⎕←: 화면에 출력
    • 그렇지 않으면
      • ⍺∇¨⍵+1: 1을 추가 하고 각 중첩 배열에 함수를 적용하십시오.

5
잠깐, 그 아스키 아트 형식으로 입력을 받습니까?
Rɪᴋᴇʀ

4
@Riker : 아니요, 일반적인 중첩 배열이 필요하지만 Dyalog APL이 중첩 배열을 표시하는 방식이며, 무슨 일이 일어나고 있는지 분명히 알 수 있습니다. 예를 들어서 작성하면됩니다 ('Atom' ('Proton' ('Up Quark' 'Up Quark' 'Down Quark') 'Neutron' ('Up Quark' 'Down Quark' 'Down Quark') 'Electron')).
marinus

9
아, 알았어요 그것은 그것을 정리합니다. 다소
실망


7

Mathematica, 58 57 56 바이트

1 바이트를 절약 한 Greg Martin에게 감사합니다.

1 바이트를 저장하는 ngenisis 덕분에.

MapIndexed[Print[Table["-",Tr[1^#2]-1]<>">",#]&,#,{-1}]&

47
PPCG에 오신 것을 환영합니다! 설명이 거의 없거나 전혀없는 답변은 시스템에 의해 자동으로 표시되어 저품질 검토 대기열에있게 됩니다. 답변이 삭제 될 수 있습니다. 삭제 된 답변이 여러 개인 경우 일시적으로 정지 될 수 있습니다. 조금만 올라 가세요!
Stewie Griffin

20
@StewieGriffin 따뜻한 환영에 감사드립니다.
Martin Ender

6
@StewieGriffin 사이트 모드를 환영하고 있습니까? 무슨 일이야? 이것은 내부 농담입니까? #confused 당신이 북쪽에 있다면 좋은 봄입니다.
Mindwin

4
@Mindwin : Stack Exchange에는 도움이되지 않는 답변을 포착하도록 설계된 필터가 있습니다. 이런 종류의 게시물 (제목 + 짧은 코드 샘플, 주석 없음)은 컴퓨터에 대한 노력이 적은 게시물과 비슷해 보이기 때문에 오 탐지를 일으킬 가능성이 높습니다 (그리고 Stewie Griffin의 의견에는 거짓 긍정이 실제로 일어났다; 그것은 상황을 재미있게 만들고있다). 다음 은 필터에 걸린 다른 게시물의 예입니다.

8
@Titus 나는 하나를 추가하고 싶지만 Stewie의 의견을 무효화하고 싶지 않습니다. :(
Martin Ender

6

자바 7 153 141 114 바이트

String r="";<T,S>S c(S s,T o){for(T x:(T[])o)if(x instanceof Object[])c("-"+s,x);else r+=s+">"+x+"\n";return(S)r;}

@ Barteks2x 덕분에 -39 바이트

설명:

String r="";                         // Result String outside the method / on class-level
<T,S> S c(S s, T o){                 // Recursive Method with generic String and Object parameters and String return-type
  for(T x : (T[])o)                  //  Loop over the input-array
    if(x instanceof Object[])        //   If the current item is an array itself:
      c("-"+s, x);                   //    Recursive method-call with this array
    else                             //   Else:
      r += s+">"+x+"\n";             //    Append return-String with stripes String-input, ">", current item, and a new-line
                                     //  End of loop (implicit / single-line body)
  return (S)r;                       //  Return the result-String
}                                    // End of method

테스트 코드 :

여기에서 시도하십시오.

class M{
  String r="";<T,S>S c(S s,T o){for(T x:(T[])o)if(x instanceof Object[])c("-"+s,x);else r+=s+">"+x+"\n";return(S)r;}

  public static void main(String[] a){
    M m = new M();
    System.out.println(m.c("", new Object[]{new Object[]{1,2},new Object[]{new Object[]{1,2},3},4,new Object[]{new Object[]{new Object[]{new Object[]{5}}}},6}));
    m.r = "";
    System.out.println(m.c("", new Object[]{"Atom",new Object[]{"Proton",new Object[]{"Up Quark","Up Quark","Down Quark"}},new Object[]{"Neutron",new Object[]{"Up Quark","Up Quark","Down Quark"}},"Electron"}));
  }
}

산출:

->1
->2
-->1
-->2
->3
>4
---->5
>6

>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Up Quark
-->Down Quark
>Electron

1
삼항 연산자를 사용 for(int j=i;j-->0;r+="-");하여 다음 줄의 작업을 수행하고 Object [] 대신 일반 인수를 사용하여 약간 더 짧게 (143 또는 142) 얻을 수 있습니다 . String r="";<T>String c(int i,T[] o){for(T x:o)if(x instanceof Object[])c(i+1,(T[])x);else for(int j=i;j-->=0;r+=j<0?">"+x+"\n":"-");return r;} 첫 번째로 0 대신 1을 전달하면 1 문자도 줄어 듭니다. 인수는 괜찮습니다.
barteks2x

일반 인수에서 []를 제거하여 더 짧게 만드는 방법을 찾았습니다. 추가 2자를 저장합니다 (하지만 5 분 후에 주석을 편집 할 수 없음)
barteks2x

@ Barteks2x 감사합니다! -12 바이트 덕분입니다. :) Btw, []1 바이트를 절약하기 위해 매개 변수에서를 제거 하면 오류가 발생합니다. 실행 후 > 디버그 에서 오류를 확인하십시오 .
케빈 크루이 센

String r="";<T>String c(int i,T a){for(T x:(T[])a)if(x instanceof Object[])c(i+1,x);else for(int j=i;j-->0;r+=j<1?">"+x+"\n":"-");return r;}이 작동합니다. 또한 문자열을 사용하여 유사한 일반 트릭을 수행하여 바이트를 추가 할 수 있지만 결과를 인쇄하기 전에 변수에 저장하거나 명시 적 캐스트 (명확한 메서드 호출)가 필요합니다.String r="";<T,S>S c(int i,T a){for(T x:(T[])a)if(x instanceof Object[])c(i+1,x);else for(int j=i;j-->0;r+=j<1?">"+x+"\n":"-");return(S)r;}
barteks2x

1
이것이 허용 된 것으로 간주되는지 확실하지 않지만 여기서 0 대신 빈 문자열을 인수로 사용하여 114 바이트 ( ">"가 인수로 허용되는 경우 1 자보다 적을 수 있음) String r="";<T,S>S c(S p,T a){for(T x:(T[])a)if(x instanceof Object[])c("-"+p,x);else r+=p+">"+x+"\n";return(S)r;}및 호출시 리턴 유형에 대한 문자열 캐스트 요구 사항 이것은지나 갔다.
barteks2x

6

PHP, 77 74 73 바이트

@manatwork 덕분에 4 바이트가 절약되었습니다.

function f($a,$p=">"){foreach($a as$e)"$e"!=$e?f($e,"-$p"):print"$p$e
";}

재귀 함수, 음수 문자열 인덱스에는 PHP 7.1 이상이 필요합니다.
"$e"이다 Array배열에 대한; 그래서 "$e"!=$e동일하다 is_array($e).

  • 접두사로 시작 >
  • -각 레벨의 접두사 앞에 a 를 붙이십시오
  • 원자에 대한 인쇄 접두사 + 요소 + 줄 바꿈

1
75 바이트 :function f($a,$p=""){foreach($a as$e)echo$p,is_array($e)?f($e,"-"):">$e\n";}
Ismael Miguel

1
필요한 포맷을하지 않았다면 print_r ($ array)는 더 작아 질 것입니다 :)
ivanivan

1
빠른 테스트를했지만 is_array($e)으로 대체 될 수 있습니다 $e[-1]!=="".
manatwork

1
@manatwork PHP 7.1에서는 PHP 7.1인데, $e[-]==""...로, 그리고 조건을 반대로 해서 할 수 있습니다 $e[-1]>"". 좋은 발견!
Titus

1
어쩌면 나는 코너 케이스를 놓칠 수도 있지만, 지금은 $e[-1]>""로 대체 될 수있는 것처럼 보입니다 "$e"==$e. 적어도 고대 PHP 5.6에서는 사용합니다.
manatwork

5

C99 (GCC) 201 187 140 112 109

f(char*a){for(long d=1,j;j=d+=*++a>90?92-*a:0;)if(*a<35){for(;j||*++a^34;)putchar(j?"->"[!--j]:*a);puts("");}}

확장 양식 :

f(char*a){
    for(long d=1,j;j=d+=*++a>90?92-*a:0;)
        if(*a<35){
            for(;j||*++a^34;)putchar(j?--j?45:62:*a);
            puts("");
        }
}

이것은 올바른 형식의 문자열을 취하고 마지막 일치 항목을 찾을 때 종료됩니다 ].

재귀를 사용하지 않고 실제로 긴 유형을 사용 하여 두 번째 규칙 인 2 ^ 32-1 levels를 달성합니다 . 대부분의 스크립팅 언어는 재귀 수준이 제한적이거나 단순히 스택 오버플로에서 충돌합니다.

나는 C에서 골프를 치는 데 익숙하지 않습니다.

그의 팁에 대한 bolov 감사합니다! 특히 골프를 잘하는 티투스 (Titus)에게 감사드립니다.

마지막 두 개와 ]일치하고 null 문자와 일치 할 필요가 없으면 완료 할 수 있다는 사실에 의해 절약 된 또 다른 2 바이트 .

Wandbox 에서 테스트 할 수 있습니다 .



두 번째 줄을 짧게 줄 수 for(int d=1 ...없습니까? long에 4 개의 문자가 있지만 int3에 3 개의 문자 만 있고 2^32 - 1제출이 유효하기 위해이 값을 초과해야 할 이유가 없으므로 단일 바이트를 절약 할 수 있습니다.
Restioson

@Restioson int는 서명되어 있으므로까지만 작동합니다 2^31-1.
Christoph

@ 크리스토프 도전은 그 이상으로 더 이상 갈 필요 가 없다고 진술 했다.
Restioson

@Restioson 도전은 일반적으로 상태 The maximum level of "layers" is 2^32-1.입니다. 2^31-1보다 훨씬 적습니다 2^32-1. 2^32-1에 맞지 않는 int그것이 맞는 동안 unsigned이나 long(물론 대부분의 시스템 / 컴파일러에입니다). 따라서 int정답을 얻지 못할 것입니다 (대부분의 답변은 그렇지 않습니다).
Christoph

4

자바 스크립트 (ES6), 58 51 바이트

f=(a,s='>')=>a.map(e=>e.map?f(e,'-'+s):s+e).join`
`

편집 : @ Arnauld가 두 가지 접근법을 결합 할 수 있다고 지적했을 때 7 바이트를 절약했습니다.


4

PHP, 1291231121099593 91 바이트

for(;a&$c=$argn[++$i];)$c<A?$c<"-"?a&$s?$s=!print"$p>$s
":0:$s.=$c:$p=substr("---$p",$c^i);

반복 솔루션은 STDIN에서 문자열을 가져옵니다 . 온라인으로
실행 echo '<input>' | php -nR '<code>'하거나 테스트하십시오 .

고장

for(;a&$c=$argn[++$i];)     // loop $c through input characters
    $c<A                        // not brackets?
        ?$c<"-"                     // comma or quote?
            ?a&$s?$s=!print"$p>$s\n":0  // if $s not empty, print and clear $s
            :$s.=$c                     // digit: append to $s
        :$p=substr("---$p",$c^i)    // prefix plus or minus one "-"
;

숫자가 따옴표 안에 있다는 것이 행복합니다. 한 번에 하나의 작업 만 필요합니다.

ASCII 피들 링

char    ascii   binary/comment
 "       34
 ,       44
 [       91     0101 1011
 ]       93     0101 1101

 A       65     $c<A    true for comma, quote and digits
 -       45     $c<"-"  true for comma and quote

                =0011 1010 -> 50 -> "2"
i^"["   105^91  ^0101 1011
 i      105      0110 1001
i^"]"   105^93  ^0101 1101
                =0011 0100 -> 52 -> "4"

에 대쉬 3 개를 추가 $p하고에 대해 2를 제거하고에 대해 2를 제거하고에 대해 [4를 ]추가 [하고 제거합니다 ].


다시 잘 했어!
Christoph

4

파이썬 2, 65 64 바이트

f=lambda o,d=0:o<''and'\n'.join(f(e,d+1)for e in o)or'-'*d+'>'+o

현재 내 대답은 일관되게 대시로 시작하므로 다음 ["foo", "bar"]과 같습니다.

>foo
>bar

import sys, pprint; pprint.pprint(sys.argv)43 바이트이지만 코드 골프 규칙을 위반하는지 모르겠습니다.
Carel

이것은 1 바이트를 절약합니다 :f=lambda o,d=0:o<''and'\n'.join(f(e,d+1)for e in o)or'-'*d+'>'+o
Ben Frankel

@Carel은 'pprint를 p로 가져 오기'또는 어쩌면 (이것이 작동하는지 확실하지 않음) 'import pprint.pprint를 p로 가져 오기'를 할 수 없습니다 (좋은 점은 전화 키보드에서 백틱을 찾을 수없는 것 같습니다)
cole

@Cole Hmm .. import sys, pprint.pprint as p; p(sys.argv)은 여전히 ​​43이지만 좋은 제안은 아닙니다.; D 시도하면 import sys.argv as v실제로 ~ 48 바이트가 길어집니다. sys.argv를 제거 할 수 있다면 많이 저장하지만 프로그램은 쓸모가 없게됩니다. 재귀 적 접근 방식은 def p(L,d=0): [p(i,d+1) if isinstance(i,list) else print(">"*d + i) for i in L]~ 80 바이트로 매우 길다 .
Carel

3

펄 5 , 55 바이트

53 바이트의 코드 + -nl플래그

/"/?print"-"x~-$v.">$_":/]/?$v--:$v++for/]|\[|".*?"/g

온라인으로 사용해보십시오!

잠재적으로 발생할 수있는 일부 초조 한 사례로 인해 정규 표현식에 적합하지 않습니다 (특히 배열 요소에 대괄호가 포함 된 경우).
재귀 익명 함수는 (61 바이트) 훨씬 길어집니다.

sub f{my$v=pop;map{ref?f(@$_,$v+1):"-"x$v.">$_"}@_}sub{f@_,0}

온라인으로 사용해보십시오!

그러나 Perl이 매개 변수를 다루는 방식은 골프 기능에 최적이 아닙니다. 선택적 매개 변수가 없다는 것은 첫 번째 기능을 호출하는 두 번째 기능 (익명)을 수행해야한다는 것을 의미하며, 마지막으로 그 매개 변수를 long으로 명시 적으로 가져와야합니다 my$v=pop.


3

루비, 49 45 46 바이트

f=->c,p=?>{c.map{|x|x==[*x]?f[x,?-+p]:p+x}*$/}

예:

puts f[["Atom",["Proton",["Up Quark", "Up Quark", "Down Quark"], "Neutron", ["Up Quark", "Down Quark", "Down Quark"], "Electron"]]]

>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

설명:

재귀 함수 : x==[*x]그렇다면 x는 배열이고 우리는 그것을 반복합니다. 그렇지 않으면 들여 쓰기하십시오.


3

하스켈, 104 바이트

l@(x:y)#(a:m)|[(h,t)]<-reads$a:m=y++h++l#t|a<'#'=l#m|a<'-'='\n':l#m|a>'['=y#m|q<-'-':l=q#m
l#_=""
(">"#)

Haskell에는 깊이가 다른 중첩 목록이 없으므로 입력 문자열을 직접 구문 분석해야합니다. 운 좋게도 라이브러리 함수 reads는 문자열을 구문 분석 할 수 있으므로 (즉, "-char 문자로 묶임) 약간 도움이됩니다.

사용 예 :

*Main> putStrLn $ (">"#) "[[\"1\",\"2\"],[\"3\",\"4\"]]" 
->1
->2
->3
->4

온라인으로 사용해보십시오! .

작동 방식 :

이 함수 #는 char 문자를 char 문자로 통과하고 중첩 수준 (첫 번째 매개 변수 l)을 -final 문자열로 유지합니다 >. 목록의 머리글을 문자열로 구문 분석 할 수 있으면 문자열을 가져 와서 l문자열을 제거한 상태에서 재귀 호출을 수행하십시오. 첫 번째 문자가 공백이면 생략하십시오. 이 경우 ,개행을 수행하여 계속 진행 ]하면, 중첩 수준을 낮추고 계속해서 [왼쪽으로 만 중첩 수준을 높이고 계속하십시오. 재귀는 빈 입력 문자열로 끝납니다. 기본 함수 (">"#)는 중첩 수준을로 설정 ">"하고를 호출합니다 #.


2

SWI- 프롤로그, 115 바이트

p(L):-p(L,[>]).
p([],_):-!.
p([H|T],F):-p(H,[-|F]),p(T,F),!.
p(E,[_|F]):-w(F),w([E]),nl.
w([]).
w([H|T]):-write(H),w(T).

바이트 수에는 포함되지 않은 가독성을 위해서만 줄 바꿈이 추가되었습니다.

p술어 F는 레벨을 더 깊이 이동할 때 접 두부에 '-'를 추가하여 배열을 반복적으로 순회합니다 . w접두사 배열과 실제 요소를 출력에 쓰는 데 사용됩니다.

예:

?- p(["Atom",["Proton",["Up Quark", "Up Quark", "Down Quark"], "Neutron", ["Up Quark", "Down Quark", "Down Quark"], "Electron"]]).
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

2

배치, 249 바이트

@echo off
set/ps=
set i=
:t
set t=
:l
set c=%s:~,1%
set s=%s:~1%
if "%c%"=="[" set i=-%i%&goto l
if not "%c%"=="]" if not "%c%"=="," set t=%t%%c%&goto l
if not "%t%"=="" echo %i:~1%^>%t%
if "%c%"=="]" set i=%i:~1%
if not "%s%"=="" goto t

성가신 배치는 쉼표를 비교하는 데 문제가 있습니다. 샘플 실행 :

[Atom,[Proton,[Up Quark,Up Quark,Down Quark],Neutron,[Up Quark,Down Quark,Down Quark],Electron]]
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

2

망막 , 63 54 52 바이트

Martin Ender 덕분에 2 바이트 절약

.*?".*?"
$`$&¶
T`[] -~`-]_`.(?=.*".*")
-]

-"
>
T`]"

온라인으로 사용해보십시오!

설명

.*?".*?"
$`$&¶

먼저 따옴표로 묶은 각 문자열을 앞에 오는 모든 항목과 그에 더하여 개행 문자로 바꾸어 배열을 분할합니다. 이렇게 분리하면 각 문자열 앞에 일치하지 않는 여는 괄호를 찾을 수 있습니다.

T`[] -~`-]_`.(?=.*".*")

이 음역은로 대체 [되고 변경되지 않은 -상태로두고 ]다른 모든 문자를 삭제합니다 (  -~모두 인쇄 가능한 ASCII 임). 그러나 각 줄의 마지막 문자열 앞에 나타나는 문자 만 바꿉니다.

-]

다음으로 모든 인스턴스 -]가 제거됩니다. 이들은 일치하는 대괄호 쌍에 해당하며 일치하지 않는 대괄호 만 원합니다. 이것들이 제거 된 후, 각 라인은 그 -앞에 오지 않은 오프닝 브라켓의 수와 같은 수를 갖습니다.

-"
>

마지막 -으로">화살표를 형성 를로 바꿉니다.

T`]"

마지막으로 나머지 ]s 및 "s가 모두 삭제됩니다.


문자열 안에 따옴표가 없다고 가정합니다. 그것이 합법적인지 확실하지 않지만 설명을 요청했습니다.
Martin Ender

@MartinEnder 잘 잡으십시오. 계속 주시하겠습니다
Business Cat


1

파이썬 3, 80 바이트

파이썬의 람다는 재귀를 지원합니다.

p=lambda l,d=1:[p(i,d+1)if isinstance(i,list)else print("-"*d+">"+i)for i in l]

이것은 orlp의 답변에 대한 카운터 / 칭찬 입니다.


PPCG에 오신 것을 환영합니다! 후행 줄 바꿈 또는 무언가를 계산 한 것으로 보이며 (80 바이트 만 계산하기 때문에) 주위에 공백이 필요하지 않습니다 =. 또한 세 개 이후에 모든 공간을 버릴 수 있다고 생각 )하지만 Python의 골프에는 익숙하지 않습니다.
Martin Ender

0

그루비, 92 바이트

x={a,b->if(a instanceof List){a.each{x(it,b+1)}}else{y(a,b)}};y={a,b->println("-"*b+">$a")};


0

Gema, 63 자

\A=@set{i;-1}
[=@incr{i}
]=@decr{i}
"*"=@repeat{$i;-}>*\n
,<s>=

다른 구문 분석 솔루션과 마찬가지로 문자열에 이스케이프 된 큰 따옴표가 없다고 가정합니다.

샘플 실행 :

bash-4.3$ gema '\A=@set{i;-1};[=@incr{i};]=@decr{i};"*"=@repeat{$i;-}>*\n;,<s>=' <<< '[["1","2"],[["1","2"],"3"],"4",[[[["5"]]]],"6"]'
->1
->2
-->1
-->2
->3
>4
---->5
>6

0

jq, 70 67 자

( 67 64 자 코드 + 3 자 명령 행 옵션)

def f(i):if type=="array"then.[]|f("-"+i)else i+. end;.[]|f(">")

샘플 실행 :

bash-4.3$ jq -r 'def f(i):if type=="array"then.[]|f("-"+i)else i+. end;.[]|f(">")' <<< '[["1","2"],[["1","2"],"3"],"4",[[[["5"]]]],"6"]'
->1
->2
-->1
-->2
->3
>4
---->5
>6

온라인 테스트

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.