int[] scores= new int[5];
System.index last = ^1; // ^1은 마지막 인덱스, ^2는 마지막에서 두번째 인덱스
Scores[last] = 34;
or
Scores[^1] = 34;
sort() , BinarySearch<T>() Clear()등
System.Range r1 = 0..3; // ..은 연산자
int [] sliced = scores[r1];
or
int[] sliced = scores[0..3];
int [,] array = new int [2,3];
array[0,0] = 1;
array[0,1] = 2;
......
int [][] jagged = new int[3][];
jagged[0] = new int[5] {1,2,3,4,5};
jagged[1] = new int[] {10,20,30};
jagged[2] = new int[] {100,200};
ArrayList에서 중요한 메소드는 Add(), RemoveAt() , Insert()가 있다.
ArrayList list = new ArrayList();
list.Add(10);
list.Add(20);
list.Add(30);
list.RemoveAt(1); // 20 삭제
list.Insert(1,25); // 삭제된 1번자리에 25삽입
입력한 데이터를 입력한 순서대로 꺼내 처리하기위해 사용.
데이터 입력 : 큐 객체.Enqueue(추가할 데이터);
데이터 출력 : 큐 객체.Dequeue();
Queue que = new Queue();
que.Enqueue(1);
que.Enqueue(2);
que.Enqueue(3);
while (que.Count>0)
{
Console.WriteLine(que.Dequeue());
}
// 123 출력
먼저 들어간 데이터가 나중에 나가는 방식.
데이터 입력 : 스택 객체.Push(추가할 데이터);
데이터 출력 : 스택 객체.Pop();
Stack stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
while(stack.Count>0)
{
Console.WriteLine(stack.Pop());
}
// 321출력
키와 값의 쌍으로 이루어진 데이터를 다룰 때 사용.
데이터 입력 : 해시터블객체["키"] = 추가할 데이터;
데이터 출력 : 해시터블객체["키"]
Hashtable ht = new Hashtable();
ht["book"] = "책";
ht["cook"] = "요리사";
Console.WriteLine(ht["book");
// 책 출력
int[] arr = {123,456,789};
ArrayList list = new ArrayList(arr);
Queue que = new Queue(arr);
Stack stack = new Stack(arr);
Hashtable ht2 = new Hashtable()
{
{"하나",1},
{"둘",2},
{"셋",3}
};
인덱서는 인덱스를 이용해서 객체 내의 데이터에 접근할 수 있게 해주는 프로퍼티.
class MyList
{
private int[] array;
public Mylist()
{
array = new int[3];
}
public int this [int index]
{
get
{
return array[index];
}
set
{
if(index >= array.Length)
{
Array.Resize<int>(ref array, index+1);
Console.WriteLine(""Array Resized : {0}", array.Length);
}
array[index] = value;
}
}
}
foreach는 IEnumerable을 상속하는 형식에만 사용할 수 있다.
IEnumerable 인터페이스가 갖고있는 메소드는 IEnumerator GetEnumerator() 메소드 하나 뿐이다.
IEnumerable 객체를 반환하기 위해서는 두가지 방법이 있다.
1) yield return을 활용하면 된다.
2) IEnumerator을 상속하는 클래스를 구현한다.
using System.Collections;
class MyEnumerator
{
int[] numbers = {1,2,3,4};
public IEnumerator GetEnumerator()
{
yield return numbers[0];
yield return numbers[1];
yield return numbers[2];
yield return break; // GetEnumerator() 종료시킴
yield return numbers[3];
}
}
class MainApp
{
static void Main(string[] args)
{
var obj = new MyEnumerator();
foreach(int i in obj)
{
console.WriteLine(i)
}
}
}
// 123 출력 , 4는 그 전에 break을 리턴했으므로 출력되지 않는다.
using System.Collection;
class MyList : IEnumerable , IEnumerator
{
private int[] array;
int position = -1; // 컬렉션의 현재위치를 다루는 변수 , -1이 기본값
public MyList()
{
array = new int[3];
}
public int this [int index]
{
get
{
return array[index];
}
set
{
if(index >= array.Length)
{
Array.Resize<int>(ref array, index+1);
Console.WriteLine(""Array Resized : {0}", array.Length);
}
array[index] = value;
}
}
// IEnumerator 멤버
public object Current
{
get
{
return array[position];
}
}
public bool MoveNext()
{
if (position == array.Length -1)
{
Reset();
return false;
}
position ++;
return(position < array.Length);
}
public void Reset()
{
position = -1;
}
public IEnumerator GetEnumerator()
{
return this;
}
}
class MainApp
{
static void Main(string[] args)
{
MyList list = new Mylist();
for (int i=0; i<5; i++)
{
list[i] = i;
}
foreach (int e in list)
{
Console.WriteLine(e);
}
}
}
//Array Resized : 4 , Array Resized : 5 , 01234 출력