반복문 for 과 자주사용되는 배열은 여러가지 값을 한꺼번에 다루어야 할 때 사용된다.
만약 1000명의 점수를 다룬다면 1000번의 변수를 선언해야 하는데, 이럴 때 필요한 것이 바로 배열이다.
예를 들어 player 5명에 대한 변수를 아래처럼 선언하고 각 변수에 숫자를 대입하여 출력한다면
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
int player0;
int player1;
int player2;
int player3;
int player4;
player0 = 5;
player1 = 10;
player2 = 15;
player3 = 20;
player4 = 25;
Debug.Log(player0);
Debug.Log(player1);
Debug.Log(player2);
Debug.Log(player3);
Debug.Log(player4);
}
// Update is called once per frame
void Update()
{
}
}
결과값 : 5, 10, 15, 20, 25
이렇게 된다.
위 예시를 반복문과 배열로 간결하게 만들어주면 아래와 같다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
int[] player = new int[5];
player[0] = 5;
player[1] = 10;
player[2] = 15;
player[3] = 20;
player[4] = 25;
for (int i = 0; i < 5; i++)
{
Debug.Log(player[i]);
}
}
// Update is called once per frame
void Update()
{
}
}
이걸 더 간결하게 만들면 아래와 같다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
int[] player = { 5, 10, 15, 20, 25 };
for (int i = 0; i < 5; i++)
{
Debug.Log(player[i]);
}
}
// Update is called once per frame
void Update()
{
}
}
모두 같은 결과가 나오지만 매우 간결해졌다.
배열의 값에는 요소라는 것에 할당되는데, 요소의 번호는 인덱스라고 하고 '0'부터 시작한다.
player[ i ] 처럼 변수 이름 뒤에 [ ] 안에 인덱스를 입력하면, 해당 인덱스 요소에 접근하게 된다.
int [ ] player = {5, 10, 15, 20, 25}; 에서 인덱스 0은 5, 인덱스 1은 10이고 인덱스 4는 25인 것이다.
그러니까 값 5,10,15,20,25 는 인덱스는 0,1,2,3,4 인덱스로 총 5개가 할당 된 것이다.
여기서 만약 10을 출력하고 싶으면 인덱스 1을 이용하고 player[1] 라고 쓰면 된다.
25을 출력하고 싶으면 player[4] 라고 쓰면 된다.
특정 인덱스에 값을 할당하는 것도 가능하다.
인덱스 2에 있는 15값을 3으로 바꾸어 출력하고 싶으면 player[2] = 3 라고 쓰면 된다.
그렇게 되면 {5, 10, 15, 20, 25} 는 {3, 10, 15, 20, 25}; 으로 되는 것이다.
여기서는 배열에 넣는 계수가 정확히 5인걸 알아서 i<5로 해주었다.
만약 배열의 개수가 정확하지 않을 때는 i<player.Length 를 써야한다.
( 배열형의 변수명.Length 는 배열의 길이를 나타낸다.)
예시를 들면
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
int[] player = { 5, 10, 15, 20, 25 };
for (int i = 0; i < player.Length; i++)
{
if(player[i]>= 20)
{
Debug.Log(player[i]);
}
}
}
// Update is called once per frame
void Update()
{
}
}
결과값은 20, 25 이다
이를 응용해서 배열의 값을 평균내는 식을 써보면 아래와 같다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
int[] player = { 5, 10, 15, 20, 25 };
int sum = 0;
for (int i = 0; i < player.Length; i++)
{
sum += player[i];
}
int average = sum / player.Length;
Debug.Log(average);
}
// Update is called once per frame
void Update()
{
}
}
결과값 : 15
* 만약 소수점까지 출력해야 한다면
int average = sum / player.Length; 를 float average = 1.0f * sum / player.Length; 로 입력해주어야 한다. (지금은 소수가 없어서 저렇게 입력해도 15로 나오지만, 소수점이 있으면 그대로 출력될 것이다.)
참고로 위에서 int [ ] player = { 5, 10, 15, 20, 25 }; 이 부분은 배열 선언과 동시에 값을 할당한 것이다.
하지만 값은 선언하지 않고 아래와 같이 배열의 크기만 설정하는 것도 가능하다.
using JetBrains.Annotations;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Study2_ArrayList : MonoBehaviour
{
public int[] inArray = { 10,5,-6,48 }; // 배열 선언과 동시애 값 할당
public int[] inArray2 = new int[3]; // 배열의 크기만 설정
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
}
이렇게 코딩한 스크립트를 오브젝트에 적용 후 플레이해보면 해당 오브젝트의 inspector에 아래와 같이 뜬다.
In Array에는 할당된 값이 들어가있지만 In Array 2 에는 따로 할당값을 설정하지 않아 자료형의 기본값인 0이 부여되었다.
'유니티 C# > C#' 카테고리의 다른 글
C#기초 - 캡슐화와 접근수식자(접근제한자) public, private 등 (0) | 2023.05.10 |
---|---|
C#기초 - 메서드(Method)란? (인수, 반환값, void 뜻) (0) | 2023.05.02 |
C#기초 - 반복문 for문 사용법 (0) | 2023.04.28 |
C#기초 - if문 블록에서의 변수 범위 (0) | 2023.04.27 |
C#기초 - else if 조건식 사용방법 (0) | 2023.04.27 |
댓글