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;
}
}
}