프로그래밍 언어(어레이) 비교

Comparison of programming languages (array)

이 프로그래밍 언어의 비교(어레이)는 다양한 컴퓨터 프로그래밍 언어대한 배열 데이터 구조 또는 매트릭스 처리의 특징을 비교한다.

구문

배열 치수

다음 목록에는 치수를 결정하는 방법( 번째 요소의 색인, 마지막 요소의 색인 또는 요소의 크기)의 구문 예가 수록되어 있다.

특히 일부 언어는 0에서 인덱싱되는 반면 다른 언어는 1에서 인덱싱되는 경우도 있다는 점에 유의하십시오. 적어도 디크스트라의 유명한 에세이 이후 제로 기반 인덱싱은 우월한 것으로 여겨져 왔고, 새로운 언어가 그것을 사용하는 경향이 있다.[1]

언어들 크기 먼저 지난
에이다 name'Length 이름'퍼스트 이름'라스트
알골 68 UPB 이름 - LWB 이름+1
2 UPB 이름 - 2 LWB 이름+1
LWB 이름
2 LWB 이름
UPB 이름

2 UPB 이름

APL 이름
(이름)[색인]
⎕IO (이름)-~이름IO
(이름)[인덱스]-~이름IO
AWK 길이 1 아소르티
C#, Visual Basic.NET, Windows PowerShell, F# name.Length 이름.GetLowerBound(차원) name.GetUpperBound(차원)
CFML arrayLen(이름)
name.len()
1 name.len()
Ch max(max(max)(이름) 0 max(max(max)(이름)-1
커먼 리스프 (길이 이름) 0 (1-(길이 이름)
D name.length 0 name.length-1
$-1
포트란 SIZE(이름) LBAND(이름) UBUND(이름)
가다 len(이름) 0 len(이름) - 1
하스켈 rangeSize(바운드 이름) fst(이름) snd(실명)
ISLISP (길이 이름) 0 (1-(길이 이름)
아이콘 *이름 1 *이름
코브라, D, Hoxe, 자바, 자바스크립트, 스칼라 name.length 0 name.length - 1
J #이름 0 <:@#이름
줄리아. 길이(이름)
크기(이름)
1
첫 번째.(이름)
종지부를 찍다
마지막(이름)
링고 카운트(이름) 1 getLast(이름)
라이브코드 길이(이름) 1
맨 처음의
-1
지난
루아 #이름 관례에 의한 1; 모든 정수[2] #이름
매스매티카 길이[이름] 1
이름[이름]
-1
성[이름]
MATLAB, GNU 옥타브 길이(이름) 1 종지부를 찍다
name.len name.low[3] name.high
오베론 LEN(이름) 0 LEN(이름) - 1
객체 파스칼 길이(이름) 0
낮은(이름)
길이(이름)-1
높은(이름)
목표-C (NSArray * 오직 [이름 개수] 0 [이름 개수] - 1
OCAML 배열.길이 이름 0 Array.length
스칼라(@name) $[ $#name
PHP 카운트(이름) 0 카운트(이름) - 1
파이톤 len(이름) 0 -1
len(이름) - 1
R 길이(이름) 1 길이(이름)
라쿠 @name.elems 0 @name.end
빨간색 길이? 이름 이름/1
이름
성씨
루비 name.size 0
이름을 짓다.첫번째
-1
name.size - 1
이름.마지막
name.len() 0 name.len() - 1
에스랑 길이(이름) 0 -1
길이(이름)-1
계략 (제곱 길이 벡터) 0 (-(제곱 길이 벡터) 1)
스몰토크 이름 크기 1
이름을 먼저 짓다
이름 크기
꼴찌를 하다
스위프트 name.count 0 name.count - 1
유니콘 *이름 1 *이름
Visual Basic 입니다. UBound(이름)-LBound(이름)+1 LBound(이름) UBound(이름)
울프람어 길이[이름] 1
이름[이름]
-1
성[이름]
소조 UBound(이름) 0 UBound(이름)
XPath/XQuery count($name) 1 count($name)
최후의
배열:size(이름)[4]

인덱싱

다음 목록에는 배열의 단일 요소에 액세스하는 방법에 대한 구문 예가 포함되어 있다.

포맷 언어들
이름[인덱스] 또는 이름[인덱스12] ALGOL 58, ALGOL 60, ALGOL 68, AWK, Modula, Pascal, Object Pascal, C#, S-Lang[5]
이름[색인] 또는 이름[색인12]
또는 인덱스 이름 또는 인덱스12 이름 등
APL
이름을[색인]하다 ActionScript, C, CFML, Ch, Cobra, C++, D, Hoxe, Java, JavaScript, Julia, Lingo, Lua, Nim, Object-C (NSArray * )), [5]Perl, PHP, Python,[5] R, Ruby,[5] Rust, Swift
$name[index] Perl,[5] Windows PowerShell,[5] XPath/XQuery[4]
@name[index] 라쿠
이름(색인) 또는 이름(색인1, 색인2) Ada, ALGOL W, BASIC, COBOL, Fortran, RPG, GNU 옥타브, MATLAB, PL/I, Scala, Visual Basic, Visual Basic.NET, Xojo
$name(색인) XPath/XQuery[4]
이름.(색인) OCAML
이름[색인] F#, OCaml
이름/색인 빨간색
이름! 색인 하스켈
$name(이름) XPath/XQuery[4]
(이름 인덱스-ref) 계략
(아레프 이름 색인) 커먼 리스프
(엘트 이름 색인) ISLISP
이름[지표] 매스매티카,[5] 울프람어
이름:index 스몰토크
[name objectAtIndex:index] 목표-C (NSArray * 오직
색인{이름 J
name.properties(index) 또는 name @ 인덱스[6] 에펠

슬라이싱

다음 목록에는 어레이의 다양한 요소에 액세스할 수 있는 방법에 대한 구문 예가 포함되어 있다.

다음 표에서:

  • 번째 - 슬라이스에서 첫 번째 요소의 색인
  • last - 슬라이스에서 마지막 요소의 인덱스
  • - 슬라이스의 마지막 요소 색인보다 하나 더 많음
  • len - 슬라이스의 길이(= 끝 - 첫 번째)
  • 단계 - 각 배열 요소의 수(기본값 1)
포맷 언어들
이름[첫째:마지막] 알골 68,[7] 줄리아
이름을 붙이다[제1+(제3자)-제3자로 하다]IO] APL
이름[첫 번째::단계] 파이톤[8][9]
이름[제1:] 가다
이름을 짓다[제1의..]마지막] 파스칼, 오브젝트 파스칼, 델파이, 님
이름[첫번째]이름[첫째]마지막] Windows PowerShell
@name[ 첫째..마지막] [10]
이름을 짓다[제1의..]마지막]
이름을 짓다[제1...끝]
이름을[첫째, 렌]으로 짓다
루비[9]
복사/부분 건너뛰기 이름 첫 번째 렌 빨간색
이름(첫째..마지막) 에이다[7]
이름(첫 번째:마지막) 포트란,[7][8] GNU 옥타브, MATLAB[7][10]
이름[첫 번째] 매스매티카,[7][8][9] 울프람어
이름을[제1:마지막]으로 짓다 에스랑[7][8][10]
이름을 짓다스텝..마지막] F#
name.properties(첫 번째, 끝) Hoxe, JavaScript, Scala
name.properties(첫 번째, 렌) CFML
array_message(이름, 첫 번째, 렌) PHP[9]
(하위 subseq 이름 첫 번째 끝 커먼 리스프
(하위 subseq 이름 첫 번째 끝 ISLISP
배열.sub 이름 첫 번째 렌 OCAML
[name subarrayWithRange:NSMakeRange(첫 번째, len)] 목표-C (NSArray * 오직
(첫번째([+i.@(-~)end){name J
이름을 짓다[제1의..]<>
이름을 짓다[첫째...마지막]
스위프트
name copyFrom: first to:last
name copyFrom: first count:len
스몰토크
이름을 짓다[제1의..]종지부를 찍다 D, C#[11][12]
이름을 짓다[제1의..]종지부를 찍다
이름을 짓다[제1의..]=마지막]
이름[제1:] 코브라

어레이 시스템 상호 참조 목록

언어 체납
기본 지수
구체화할 수 있음
색인 유형[13]
구체화할 수 있음
기본 지수
바운드 수표 다차원 동적 크기 벡터 연산
에이다 색인 유형[14] 확인했다 초기화하다[15] 일부, 기타 정의[16] 가능한
알골 68 1 아뇨[17] 다르다 사용자 정의 가능
APL 1 ? 0[18] 또는 1 확인했다
AWK 1 그래, 암묵적으로 아니요. 무제한의 예, 구분 문자열로 지정 그래, 다시 한 번 더. 아니요.
기본 0 ? 아니요. 확인했다 아니요. 초기화하다[15] ?
C 0 아니요. 아뇨[19] 무제한의 부분적으로는 init[21],[15][20] 아니요.
Ch 0 아니요. 아니요. 확인했다 예, 배열[22] init[21],[15][20]
C++[16] 0 아니요. 아뇨[19] 무제한의 예, 배열[22] 산더미처럼[21] 쌓다 아니요.
C# 0 아니요. 부분적[23] 확인했다 산더미처럼[21][24] 쌓다 예(LINQ 선택)
CFML 1 아니요. 아니요. 확인했다 예, 배열[22] 아니요.
코볼 1 아뇨[25] 아니요. 확인했다 배열[22][26]. 아뇨[27] 어떤 본질.
코브라 0 아니요. 아니요. 확인했다 배열[22]. 산더미처럼 쌓다 ?
커먼 리스프 0 ? 아니요. 점검한[28] 예(지도 또는 지도 표시)
D 0 [29] 아니요. 다양하다[30] ?
F# 0 아니요. 부분적[23] 확인했다 산더미처럼[21][24] 쌓다 예(지도)
프리베이직 0 아니요. 확인했다 init,[15] init[31] ?
포트란 1 다양하다[32]
폭스프로 1 ? 아니요. 확인했다 ?
가다 0 아니요. 아니요. 확인했다 배열[22]. 아뇨[33] 아니요.
해킹 0 확인했다
하스켈 0 [34] 확인했다 예, 배열[22] 초기화하다[15] ?
IDL 0 ? 아니요. 확인했다
ISLISP 0 ? 아니요. 확인했다 초기화하다[15] 예(지도 또는 지도 표시)
J 0 ? 아니요. 확인했다
자바[16] 0 아니요. 아니요. 확인했다 배열[22]. 초기화하다[15] ?
자바스크립트 0 아니요. 아니요. 점검한[35] 배열[22].
줄리아. 1 확인했다
링고 1 ? ? 무제한의
루아 1 ? 부분적[36] 확인했다 배열[22]. ?
매스매티카 1 아니요. 아니요. 확인했다
매트랩 1 ? 아니요. 확인했다 [37]
0 [3] 선택적[38] 배열[22]. [39]
오베론 0 ? 아니요. 확인했다 아니요. ?
오베론-2 0 ? 아니요. 확인했다 ?
목표-C[16] 0 아니요. 아니요. 확인했다 배열[22]. 아니요.
OCAML 0 아니요. 아니요. 기본적으로 선택되어 있는 배열[22]. 초기화하다[15] ?
파스칼, 오브젝트 파스칼 색인 유형[14] 다양하다[40] 다양하다[41] 약간의
0 아니요. 네 ()$[) 점검한[35] 배열[22]. 아뇨[42]
라쿠 0 아니요. 아니요. 점검한[35]
PHP 0 [43] [43] 점검한[43]
PL/I 1 ? 확인했다 아니요. ?
파이톤 0 아니요. 아니요. 확인했다 배열[22]. 아뇨[44]
RPG 1 아니요. 아니요. ? 아니요. 아니요. ?
R 1 ? 아니요. 무제한의 예, 배열
울리다 1 ? 부분적[36] 확인했다 배열[22]. ?
루비 0 아니요. 아니요. 점검한[35] 배열[22]. ?
0 아니요. 아니요. 확인했다 ? ?
새스 1 아니요. 아니요. 확인했다 배열[22]. 초기화하다[30] ?
에스랑 0 ? 아니요. 확인했다
스칼라 0 아니요. 아니요. 확인했다 배열[22]. 초기화하다[15] 예(지도)
계략 0 ? 아니요. 확인했다 배열[22]. 초기화하다[15] 예(지도)
스몰토크[16] 1 ? 아니요. 확인했다 배열[22]. [45] ?
스위프트 0 아니요. 아니요. 확인했다 배열[22]. ?
Visual Basic 입니다. 0 아니요. 확인했다 ?
Visual Basic 입니다.네트 0 아니요. 부분적[23] 확인했다 예(LINQ 선택)
울프람어 1 아니요. 아니요. 확인했다
Windows PowerShell 0 아니요. 아니요. 확인했다 산더미처럼 쌓다 ?
소조 0 아니요. 아니요. 확인했다 아니요.
XPath/XQuery 1 아니요. 아니요. 확인했다 배열[4][22].

벡터화된 배열 연산

Ada, Fortran과 같은 컴파일된 언어와 IDL, MATLAB, S-Lang과 같은 일부 스크립팅 언어는 어레이에서 벡터화된 작동을 기본적으로 지원한다. 예를 들어, 두 배열의 요소 합계를 기준으로 요소를 수행하려면, ab를 사용하여 세 번째 c를 생성하면 된다.

 c = a + b 

이들 언어는 벡터화된 산술과 관계 연산을 지원하는 것 외에도 사인(sine)과 같은 공통의 수학 함수도 벡터화한다. 예를 들어, x가 배열인 경우

 y = 죄(x) 

배열 y의 원소가 배열 x의 해당 원소의 사인인 배열 y가 된다.

벡터화 인덱스 연산도 지원한다. 예를 들면,

 짝수 = x(2::2);  기묘한 = x(::2); 

Fortran을 사용하여 배열의 짝수 항목과 홀수 항목에서 배열을 만드는 방법이다. 벡터화 지수의 또 다른 일반적인 용도는 필터링 작업이다. 0.5보다 큰 진폭을 0.5로 설정하는 사인파의 클리핑 작업을 고려하십시오. S-Lang을 사용하면

 y = sin(x); y[where(abs(y)>0.5)] = 0.5; 

수학적 행렬 연산

언어/
도서관
만들다 결정인자 전치하다 요소 컬럼 배를 젓다 아이겐값
APL mdimsx11 x12 ... -.×m m m[i;j] 또는 i jm m[;j] 또는 j[2]m 또는 j1m 또는 j⌷⍉m m[i;] 또는 im 1m
포트란 m = RESHAPE([x11, x12, ...], SHAPE(m)) TRANSPOSE(m) m(i,j) m(:,j) m(i,:)
Ch[46] m = {...} determinant(m) transpose(m) m[i-1][j-1] shape(m,0) shape(m,1) eigen(output, m, NULL)
매스매티카 /
울프람어
{{x11, x12, ...}, ...} Det[m] Transpose[m] m[[i,j]] m[[;;,j]] m[[i]] Eigenvalues[m]
MATLAB /
GNU 옥타브
m = [...] det(m) m.' m(i,j) m(:,j) m(i,:) eig(m)
NumPy m = mat(...) linalg.det(m) m.T m[i-1,j-1] m[:,j-1] m[i-1,:] linalg.eigvals(m)
에스랑 m = reshape([x11, x12, ...], [new-dims]) m = transpose(m) m[i,j] m[*,j] m[j,*]
심피 m = Matrix(...) m.T m[i-1,j-1]

참조

  1. ^ "E.W. Dijkstra Archive: Why numbering should start at zero (EWD 831)".
  2. ^ "Programming in Lua : 11.1".
  3. ^ a b "Nim Tutorial (Part I)".
  4. ^ a b c d e XPath/XQuery에는 두 종류의 어레이가 있다. 중첩할 수 없는 시퀀스(1,2,3) 중첩할 수 있는 XPath/XQuery 3.1 버전 어레이 {1,2,3 } 또는 [1,2,3]
  5. ^ a b c d e f g 지수는 음수일 수 있으며, 배열이 끝나기 전의 해당 장소 수를 나타낸다.
  6. ^ "Eiffeldoc : ARRAY".
  7. ^ a b c d e f 다차원 배열의 슬라이스도 지원되며 유사하게 정의된다.
  8. ^ a b c d 유형 조각 first:last:step 또한 지원된다.
  9. ^ a b c d 마지막 또는 은 음수일 수 있으며, 배열이 끝나기 전의 해당 위치에서 중지됨을 나타낸다.
  10. ^ a b c 보다 일반적으로 1-d 어레이의 경우 PerlS-Lang에서 폼 슬라이스를 허용array[indices], where indices 각주 2에 언급된 범위 또는 명시적인 지수 목록이 될 수 있다(예: ').[0,9,3,4]' 또는 둘 다 혼합된 경우(예: A[[[0:3]],7,9,[11:2:-3]]].
  11. ^ C# 8.0 제안 특징(2019년 8월 29일 기준)
  12. ^ "Ranges - C# 8.0 language proposals". Microsoft Docs. Microsoft. Retrieved 29 August 2019.
  13. ^ 인덱스 유형은 자유롭게 선택한 정수 유형, 열거 유형 또는 문자 유형일 수 있다. 비-컴팩트 인덱스 유형이 있는 어레이의 경우 다음을 참조하십시오. 연관 배열
  14. ^ a b 기본 기본 인덱스는 사용된 인덱스 유형의 가장 낮은 값임
  15. ^ a b c d e f g h i j k 크기가 고정된 후 초기화할 때만 크기를 선택할 수 있음
  16. ^ a b c d e 이 목록은 언어의 특징을 엄격히 비교하고 있다. 모든 언어(짝수 조립자)에서 라이브러리 추가를 통해 향상된 배열 처리를 제공할 수 있다. 이 언어는 표준 라이브러리의 일부로 배열 처리를 개선했다.
  17. ^ ALGOL 68 어레이는 INT 유형별로 첨자(및 슬라이스)해야 한다. 그러나 해시함수를 사용하여 다른 유형을 INT로 변환할 수 있다(예: 이름[hash("string")]).
  18. ^ 인덱싱 베이스는 시스템 변수 ⎕IO에 따라 0 또는 1이 될 수 있다. 이 값은 전체 "워크스페이스"에 적용되거나, 변형 연산자(modify operator)를 사용하여 사용자 정의 함수 또는 단일 원시 함수로 지역화할 수 있다.
  19. ^ a b C는 경계 검사 지수를 제공하지 않기 때문에, 어떤 배열의 내부에 대한 포인터가 정의될 수 있으며, 이는 음의 지수나 정수 지수 원점을 수용하는 유사 배열로 상징적으로 작용할 수 있다.
  20. ^ a b C99는 가변 크기 어레이를 허용하지만 이 새로운 기능을 지원하는 컴파일러가 거의 없음
  21. ^ a b c d e 크기는 메모리가 스택에 할당되었을 때와 구별되는 힙에 할당되었을 때만 초기화할 때 선택할 수 있다. 힙에 항상 어레이를 할당하는 언어에는 이 메모를 작성할 필요가 없음
  22. ^ a b c d e f g h i j k l m n o p q r s t u v w 전부는 아니지만 다차원 어레이를 에뮬레이트하는 데 사용할 수 있는 어레이 어레이 허용
  23. ^ a b c 시스템을 사용하여 초기화할 때 베이스를 변경할 수 있다.Array.CreateInstance(시스템 반환)배열), 그러나 언어 구문을 사용할 때는 그렇지 않다. 0이 아닌 기본 지수를 가진 배열은 기본 지수를 0으로 하는 배열과 같은 유형이 아니며 언어 구문(GetValueSetValue 방법을 대신 사용해야 함)을 사용하여 조작하거나 VB의 특정 유형(T[] 또는 T()으로 다운캐스트할 수 없다.NET(NET), 기본 지수가 0이라고 가정하는 코드 파손 방지.
  24. ^ a b "안전하지 않은" 코드로 고정 크기 어레이를 생성하여 다른 언어와의 상호 운용성 향상
  25. ^ COBOL 배열은 정수 유형과 구별되는 "INDEX" 유형으로 색인화할 수 있다.
  26. ^ COBOL은 배열만 가지고 있는 반면 배열 요소는 다차원 배열과 같은 구문으로 접근할 수 있는데, 여기서 언어는 자동으로 참조되는 항목을 둘러싸는 배열과 색인을 일치시킨다.
  27. ^ COBOL은 어레이의 사용 가능한 크기가 가변적임을 지정하는 방법을 제공하지만, 이는 선언된 최대 크기, 즉 할당된 크기보다 클 수 없다.
  28. ^ 대부분의 일반 Lisp 구현을 통해 선택적으로 검사를 비활성화할 수 있음
  29. ^ 연관 배열 - D 프로그래밍 언어
  30. ^ a b 동작은 컴파일러 스위치를 통해 조정할 수 있다. DMD의 경우와 같이 효율을 위해 디버그 모드에서 1.0 한계를 점검하고 릴리스 모드에서 선택 해제하십시오.
  31. ^ FreeBASIC은 가변 배열 길이와 고정 길이 배열을 모두 지원한다. 인덱스 범위가 없는 어레이는 가변 길이 어레이로, 선언된 범위를 가진 어레이는 고정 길이 어레이로 생성됨
  32. ^ 거의 모든 Fortran 구현에서는 컴파일러 스위치를 통해 한계 확인 옵션을 제공한다. 그러나 기본적으로 효율을 위해 한계 점검은 해제되어 있다.
  33. ^ 골랑의 어레이 타입은 동적으로 사이즈가 맞지 않지만, 데이터 타입 Slice는 동적으로 사이즈가 작아 어레이에 비해 훨씬 일반적이다.
  34. ^ Haskell 배열(데이터).배열) Ix의 인스턴스인 모든 유형을 인덱스 유형으로 사용할 수 있다. 따라서 Ix를 인스턴스화하는 한 사용자 정의 유형을 정의하고 인덱스 유형으로 사용할 수 있다. 또한 Ix 타입의 튜플도 Ix 타입이다. 이것은 다차원 배열의 구현에 흔히 사용된다.
  35. ^ a b c d 이들 언어에서 어레이 길이보다 크거나 같은 배열 인덱스에 액세스하거나 쓸 수 있으며 어레이는 암시적으로 해당 크기로 커진다. 이는 처음에는 한도를 확인하지 않은 것처럼 나타날 수 있지만, 어레이를 확장하기 위해 한도를 검사하며, C에서와 같이 안전하지 않은 메모리 액세스를 가지고 있지 않은 경우
  36. ^ a b 기본 인덱스를 지정하면 임의 베이스의 배열을 만들 수 있다. 그러나 기본적으로 루아의 길이 연산자는 길이를 계산할 때 배열의 기본 지수를 고려하지 않는다. 이 행동은 변태에 의해 바뀔 수 있다.
  37. ^ 최소 2차원(스칼라 번호는 1×1 배열, 벡터는 1×n 또는 n×1 배열)
  38. ^ "Nim Compiler User Guide".
  39. ^ "Vectorization - R-style logical vector operation in Nim".
  40. ^ 많은 구현(Turbo Pascal, Object Pascal(Delphi), FreePascal)을 통해 컴파일러 스위치 및 인라인 지침에 따라 동작 변경 가능
  41. ^ 구현에 따라 다름. 새로운 구현(FreePascal, Object Pascal(Delphi))을 통해 힙 기반 동적 어레이 지원
  42. ^ 표준 Perl 어레이 데이터 유형은 여기서 정의한 벡터화된 연산을 지원하지 않는다. 그러나 Perl Data Language 확장은 이 기능을 가진 어레이 개체를 추가함
  43. ^ a b c PHP의 "array"는 연관 배열이다. 당신은 정수와 문자열을 키(인덱스)로 사용할 수 있다. 플로트는 키로도 사용할 수 있지만 정수로 잘린다. "기준 지수"나 "bounds"는 실제로 존재하지 않는다.
  44. ^ 표준 Python 어레이 유형, list는 여기서 정의된 대로 벡터화된 연산을 지원하지 않는다. 그러나 numpy 확장자는 이 기능을 가진 배열 객체를 추가한다.
  45. ^ 클래스 배열이 고정 크기지만 OrderCollection은 동적임
  46. ^ Ch 숫자 형상