2017. 3. 23. 00:22
Unity/C#
내부값과 검색하여 하나라도 맞는지 검사하여 bool 반환 x는 내부값을 나타냄 반드시 x로 써야함
if (nameList.Exists(x => x.ToString() == "name"))
해당하는 값이 존재하는지 bool 반환함 위 코드와 같음
nameList.Contains("name")
해당 하는 조건에 맞는 항목들을 전부 지움, 아래의 경우는 ".meta"가 포함된경우 전부 지운다.
x는 내부값이고 무조건 x로 써야함
fileNames.RemoveAll(x => x.Contains(".meta"));
리스트 복제(깊은복사)
List<int> DNA_copy = DNA.GetRange(0, DNA.Count);
리스트복제 2
var list2 = new List<int>(list);
중간삽입
DNAcopy.Insert(index, mScript.irandom(random_value));
중간삽입(배열 및 리스트)
list.InsertRange(index, 배열 혹은 리스트);
다중추가(배열 및 리스트)
list.AddRange(배열 혹은 리스트);
Linq계열
using System.Linq;
//중복제거
//앞글자 3글자가 같은녀석들만 제거함, x => x.Substring(0,3) 이부분만 수정해서 쓰면 됨
list = list.GroupBy(x => x.Substring(0,3)).Select(x=>x.First()).ToList();
//중복제거2
//완벽히 동일한것만 제거
list = list.GroupBy(x => x).Select(x=>x.First()).ToList();
//그룹리스트 (같은값끼리 짝지어서 나온다)
List<int> list=new int[] { 1,1,1,2,2,3,4,4}.ToList();
var groupList = list.GroupBy(x => x).ToList();
for (int i = 0; i < groupList.Count; i++)
{
var group = groupList[i].ToList();
for (int j = 0; j < group.Count; j++)
{
Debug.Log(group[j]);
}
}
//중복제거 심플버전 구조체만 가능(예를들어 게임오브젝트는 안된다)
list.Distinct();
//전부 더하기
list.Sum();
//슬라이스(자르기)
var list = new List<int>(new int[] { 1, 2, 3, 4, 5 });
var length = 3;
var sliceList = list.Take(length).ToList();
Debug.Log(string.Join(", ", sliceList));
//결과: 1,2,3
//슬라이스2 (중간부터)
var list = new List<int>(new int[] { 1, 2, 3, 4, 5 });
var startIndex = 1;
var length = 3;
var sliceList = list.Skip(startIndex).Take(length).ToList();
Debug.Log(string.Join(", ", sliceList));
//결과: 2,3,4
최댓값 (맥스)
double dividendMax = list.Max(x => x.dividend);
최댓값'들'
var timeMax = saves.Max(save => save.time);
var timeMaxSaves = saves.FindAll(save => save.time == timeMax);
셔플(미세한 편향, 비둘기집문제)
하지만 구조가 간단하므로 중요로직이 아니면 이걸로 처리한다
using System.Linq;
//유니티버전
list = list.OrderBy(a => Random.value).ToList();
//닷넷버전
System.Random seed = new System.Random((Int32)DateTime.Now.Ticks);
list = list.OrderBy(a => seed.Next()).ToList();
셔플(완전한)
public static void ShuffleList<T>(ref List<T> targetList)
{
for (int i = 0; i < targetList.Count; i++)
{
int j = Random.Range(0, targetList.Count);
T t = targetList[i];
targetList[i] = targetList[j];
targetList[j] = t;
}
}
정렬//오름차순
creature_list.Sort();
정렬//내림차순 정렬
list.Sort((x, y) => y.CompareTo(x));
이것과 동일함
List<double> A;
List<double> B;
//동일버전
list.Sort((A, B) => B.CompareTo(A));
//람다 긴버전
list.Sort(delegate (var a, var b)
{
return b.CompareTo(a);
});
//if방식
list.Sort(delegate (var a, var b)
{
if (a > b)
{
return -1;
}
if (a < b)
{
return 1;
}
return 0;
});
//for방식
for (int i = 0; i < list.Count; i++)
{
for (int j = i + 1; j < list.Count; j++)
{
var a=list[i];
var b=list[j];
if (a > b)
{
var t=a;
a=b;
b=t;
}
}
}
'Unity > C#' 카테고리의 다른 글
유니티 각도계산 모음 (0) | 2017.11.06 |
---|---|
유니티 함수 정리 (0) | 2017.07.02 |
c# list와 array속도 비교 (3) | 2017.01.25 |