parent
4acd09f034
commit
a474b715fd
@ -0,0 +1,3 @@ |
|||||||
|
{ |
||||||
|
"dotnet.defaultSolution": "AdvancedC#Grammer/MySolution/MySolution.sln" |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||||
|
|
||||||
|
<PropertyGroup> |
||||||
|
<OutputType>Exe</OutputType> |
||||||
|
<TargetFramework>net7.0</TargetFramework> |
||||||
|
<ImplicitUsings>enable</ImplicitUsings> |
||||||
|
<Nullable>enable</Nullable> |
||||||
|
</PropertyGroup> |
||||||
|
|
||||||
|
</Project> |
@ -0,0 +1,47 @@ |
|||||||
|
namespace MyConsoleApp.Work |
||||||
|
{ |
||||||
|
public class AsyncAwaitWork |
||||||
|
{ |
||||||
|
private static Task Test() |
||||||
|
{ |
||||||
|
System.Console.WriteLine("Start Test"); |
||||||
|
Task t = Task.Delay(3000); |
||||||
|
return t; |
||||||
|
} |
||||||
|
|
||||||
|
private static async void TestAsync() |
||||||
|
{ |
||||||
|
System.Console.WriteLine("Start Test"); |
||||||
|
Task t = Task.Delay(3000); |
||||||
|
await t; // 함수 내부에서는 동기, 함수 호출부에서는 비동기로 처리됨 |
||||||
|
System.Console.WriteLine("End TestAsync"); |
||||||
|
} |
||||||
|
|
||||||
|
private static async Task<int> TestAsync2() |
||||||
|
{ |
||||||
|
System.Console.WriteLine("Start Test"); |
||||||
|
Task t = Task.Delay(3000); |
||||||
|
await t; |
||||||
|
System.Console.WriteLine("End TestAsync"); |
||||||
|
|
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
public async static void DoTest() |
||||||
|
{ |
||||||
|
// Task t = Test(); |
||||||
|
// t.Wait(); |
||||||
|
|
||||||
|
//TestAsync(); |
||||||
|
await TestAsync2(); // 메인 함수도 동기로 처리됨 |
||||||
|
|
||||||
|
int res = await TestAsync2(); |
||||||
|
|
||||||
|
System.Console.WriteLine("While start"); |
||||||
|
while (true) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,160 @@ |
|||||||
|
using System.Diagnostics; |
||||||
|
using System.Security.Cryptography; |
||||||
|
|
||||||
|
namespace MyConsoleApp.Work |
||||||
|
{ |
||||||
|
public class LinqWork |
||||||
|
{ |
||||||
|
private static List<Player> _players = new List<Player>(); |
||||||
|
|
||||||
|
private static void InitInstance() |
||||||
|
{ |
||||||
|
Random rand = new Random(); |
||||||
|
for (int i = 0; i < 100; i++) |
||||||
|
{ |
||||||
|
ClassType type = ClassType.Knight; |
||||||
|
switch (rand.Next(0, 3)) |
||||||
|
{ |
||||||
|
case 1: |
||||||
|
type = ClassType.Archer; |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
type = ClassType.Mage; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
Player player = new Player() |
||||||
|
{ |
||||||
|
ClassType = type, |
||||||
|
Level = rand.Next(1, 100), |
||||||
|
Hp = rand.Next(100, 1000), |
||||||
|
Attack = rand.Next(5, 50) |
||||||
|
}; |
||||||
|
|
||||||
|
for (int j = 0; j < 5; j++) |
||||||
|
{ |
||||||
|
player.Items.Add(rand.Next(1, 100)); |
||||||
|
} |
||||||
|
|
||||||
|
_players.Add(player); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void DoTest() |
||||||
|
{ |
||||||
|
InitInstance(); |
||||||
|
|
||||||
|
// Q1) 레벨 50 이상인 Knight를 레벨 오름차순으로 정렬 |
||||||
|
|
||||||
|
Stopwatch sw = new Stopwatch(); |
||||||
|
sw.Start(); |
||||||
|
// Without Linq |
||||||
|
{ |
||||||
|
List<Player> players = GetHighLevelKnight(); |
||||||
|
foreach (Player player in players) |
||||||
|
{ |
||||||
|
System.Console.WriteLine($"[{player.Level}] {player.Hp}"); |
||||||
|
} |
||||||
|
} |
||||||
|
System.Console.WriteLine($"{sw.ElapsedMilliseconds}ms"); |
||||||
|
|
||||||
|
System.Console.WriteLine("---------------------"); |
||||||
|
|
||||||
|
sw.Restart(); |
||||||
|
// With Linq |
||||||
|
{ |
||||||
|
var players = |
||||||
|
from p in _players |
||||||
|
where p.ClassType == ClassType.Knight && p.Level >= 50 |
||||||
|
orderby p.Level |
||||||
|
select p; |
||||||
|
|
||||||
|
foreach (Player player in players) |
||||||
|
{ |
||||||
|
System.Console.WriteLine($"[{player.Level}] {player.Hp}"); |
||||||
|
} |
||||||
|
} |
||||||
|
System.Console.WriteLine($"{sw.ElapsedMilliseconds}ms"); |
||||||
|
|
||||||
|
// from 중첩 |
||||||
|
// Q2) id가 30 미만인 모든 아이템 목록 추출 |
||||||
|
{ |
||||||
|
var playerItems = |
||||||
|
from p in _players |
||||||
|
from i in p.Items |
||||||
|
where i < 30 |
||||||
|
select new { p, i }; |
||||||
|
|
||||||
|
var li = playerItems.ToList(); |
||||||
|
System.Console.WriteLine($"Count: {li.Count}"); |
||||||
|
} |
||||||
|
|
||||||
|
// grouping |
||||||
|
{ |
||||||
|
var playerByLevel = |
||||||
|
from p in _players |
||||||
|
group p by p.Level into g |
||||||
|
orderby g.Key |
||||||
|
select new { g.Key, Players = g }; |
||||||
|
} |
||||||
|
|
||||||
|
// join |
||||||
|
{ |
||||||
|
List<int> levels = new List<int>() { 1, 5, 10 }; |
||||||
|
var players = |
||||||
|
from p in _players |
||||||
|
join l in levels |
||||||
|
on p.Level equals l |
||||||
|
select p; |
||||||
|
} |
||||||
|
|
||||||
|
// Linq 표준 연산자 |
||||||
|
{ |
||||||
|
var players = |
||||||
|
from p in _players |
||||||
|
where p.ClassType == ClassType.Knight && p.Level >= 50 |
||||||
|
orderby p.Level |
||||||
|
select p; |
||||||
|
|
||||||
|
var players2 = _players |
||||||
|
.Where(p => p.ClassType == ClassType.Knight && p.Level >= 50) |
||||||
|
.OrderBy(p => p.Level) |
||||||
|
.Select(p => p); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private static List<Player> GetHighLevelKnight() |
||||||
|
{ |
||||||
|
List<Player> players = new List<Player>(); |
||||||
|
foreach (Player player in _players) |
||||||
|
{ |
||||||
|
if (player.ClassType != ClassType.Knight) |
||||||
|
continue; |
||||||
|
if (player.Level < 50) |
||||||
|
continue; |
||||||
|
|
||||||
|
players.Add(player); |
||||||
|
} |
||||||
|
|
||||||
|
players.Sort((lhs, rhs) => { return lhs.Level - rhs.Level; }); |
||||||
|
|
||||||
|
return players; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public enum ClassType |
||||||
|
{ |
||||||
|
Knight, |
||||||
|
Archer, |
||||||
|
Mage, |
||||||
|
} |
||||||
|
|
||||||
|
public class Player |
||||||
|
{ |
||||||
|
public ClassType ClassType { get; set; } |
||||||
|
public int Level { get; set; } |
||||||
|
public int Hp { get; set; } |
||||||
|
public int Attack { get; set; } |
||||||
|
public List<int> Items { get; set; } = new List<int>(); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue