2020년 3월 25일 수요일

c# list 한칸 shift 하기



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void ShiftPoints()
        {
            if (AllPoints.Count <= MaxCount)
                return;
            for (int i = 0; i < MaxCount; i++)
            {
                AllPoints[i] =  new Vector3(AllPoints[i].x, AllPoints[i + 1].y,0);
            }
            AllPoints.RemoveRange(MaxCount, 1);
        }
void ShiftPoints()
        {
            if (AllPoints.Count <= MaxCount)
                return;
            for (int i = 0; i < MaxCount; i++)
            {
                AllPoints[i] =   AllPoints[i + 1].y;
            }
            AllPoints.RemoveRange(MaxCount, 1);
        }
cs

텍스트파일을 읽어서 딕셔너리로 변환하는 함수




1
2
3
4
5
6
7
8
9
10
11
텍스트파일을 읽어서 딕셔너리로 변환하는 함수
public FileToDict()
{
    var lines = File.ReadAllLines("fileName.txt");
    var dict = lines.Select(line=>line.Split('='))
                .ToDictionary(x=>x[0],x=>x[1]);
(왼쪽)=키,(오른쪽)=발류
}
cs


c# 컬렉션 나열 방법(LINQ)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
컬렉션을 오름차순으로 정렬한다.
var sortedBooks = books.OrderBy(x=>x.Price);
컬렉션을 내림차순으로 정렬한다.
var sortedBooks = books.OrderByDescending(x=>x.Price);
주의
OrderBy 메서드를 호출하는 것만으로 books 자체가 정렬되는 것은 아니므로 반드시 OrderBy의 결과를 변수에
넣어야한다
books 컬렉션 자체를 정렬하고 싶다면 다른방법을 사용해야한다
예제
books.Sort(BookCompare);
private int BookCompare(Book a, Book b)
{
    
    return a.Price-b.Price; //가격이 싼 순서로 정렬하기 위해 이렇게 지정한다.
//비싼순은 반대로 하면 
}
cs

c# 조건을 만족하는 n개의 요소 구하기(LINQ)

where(x=>x>0).Take(1);

2020년 3월 24일 화요일

C# 객체끼리 비교할때

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
객체끼리 비교할 때
프로그래밍할 때 등가 연산자(==연산자나 != 연산자)를 사용해 두 개의 객체를 비교할 때가 자주 있습니다.
이때 주의해야 할 점은 값형과 참조형 사이에는 '같다'라는 의미가 다르다는 점입니다.
값형 = 일반적으로 알고있는 같다의 개념
참조형 = 일반적으로 알고있는 개념이 아니다
Sample a = new Sample{NUM = 1, STR = "C#"};
Sample b = new Sample{NUM =1 , STR = "C#"};
if(a == b)
{
    a와 b는 메모리 상에서 각각 별도로 확보된 객체이므로
    이 부분에 작성된 코드는 실행되지 않는다.
}
다음 코드에서는 동일한 참조를 가지고 있으므로 같다고 판정됩니다.
Sample a = new Sample{NUM = 1, STR = "C#"};
Sample b = a;
if(a == b)
{
    a와 b는 메모리 상에서 동일한 객체를 참조하므로
    이 부분에 작성된 코드가 실행된다.
}
cs

stringBuilder를 사용해 문자열을 연결한다.

다음과 같은 코드를 작성하면 인스턴스가 엄청나게 많이 생성되므로 CPU와 메모리 자원을
낭비하게 됩니다.

text+= GetWord(i); //여기서 getword()는 어디선가 단어를 가져오는 함수





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
효과적인 text Append
using system.Text;
var sb = new StringBuilder();
foreach(var word in GetWords())
{
    sb.Apped(word);
}
var text = sb.Tostring();
기본적인 초기화
var sb = new StringBuilder(200);
대략적인 길이를 알고있다면 초기화 해주는게 좋다. (자동으로 늘어남)
cs

여러 개의 생성자를 정의한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public AppVersion(int major,int minor)
:this(major,minor,0,0){}
public AppVersion(int major,int minor,int revision)
:this(major,minor,revision,0){}
//위에있는 두개의 생성자가 이 생성자를 호출한다.
public AppVersion(int major,int minor,int build,int revision)
{
 Major = major;
 Minor = minor;
 Build = build;
 Revision = revision;
}
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
C# 4.0 이후에는 옵션 인수를 사용해서 다음과 같이 작성할 수 있습니다.
class AppVersion{
public AppVersion(int major,int minor,int build = 0,int revision =0)
{
 Major = major;
 Minor = minor;
 Build = build;
 Revision = revision;
}
}
cs

git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...