From 633e63005e7f8784b106970dd0ffeff2844205cc Mon Sep 17 00:00:00 2001 From: MikePuzanov <89803250877@mail.ru> Date: Tue, 13 Jul 2021 16:17:05 +0300 Subject: [PATCH] task --- Task/Task.sln | 25 +++++++++ Task/Task/Program.cs | 116 ++++++++++++++++++++++++++++++++++++++++++ Task/Task/Task.csproj | 8 +++ 3 files changed, 149 insertions(+) create mode 100644 Task/Task.sln create mode 100644 Task/Task/Program.cs create mode 100644 Task/Task/Task.csproj diff --git a/Task/Task.sln b/Task/Task.sln new file mode 100644 index 0000000..114bacd --- /dev/null +++ b/Task/Task.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31205.134 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Task", "Task\Task.csproj", "{C5ED86F8-7583-4039-A1FC-AB7C1CACF91B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C5ED86F8-7583-4039-A1FC-AB7C1CACF91B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5ED86F8-7583-4039-A1FC-AB7C1CACF91B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5ED86F8-7583-4039-A1FC-AB7C1CACF91B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5ED86F8-7583-4039-A1FC-AB7C1CACF91B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5A895920-F6AA-4C11-B7E4-87299C7A499F} + EndGlobalSection +EndGlobal diff --git a/Task/Task/Program.cs b/Task/Task/Program.cs new file mode 100644 index 0000000..e358c70 --- /dev/null +++ b/Task/Task/Program.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace HwProjTask +{ + class Entity1 + { + public int EntityId { get; set; } + public string Data { get; set; } + public DateTime CreationTime { get; set; } + public int? Entity2Id { get; set; } + public bool Flag { get; set; } + + public Entity1(int id, string data, DateTime time, int? id2, bool flag) + { + EntityId = id; + Data = data; + CreationTime = time; + Entity2Id = id2; + Flag = flag; + } + } + + class Entity2 + { + public int EntityId { get; set; } + public double Data { get; set; } + public DateTime CreationDate { get; set; } + + public Entity2(int id, double data, DateTime time) + { + EntityId = id; + Data = data; + CreationDate = time; + } + } + + class EntityAggregate + { + public int EntityId { get; set; } + public string Data { get; set; } + public DateTime CreationTime { get; set; } + public bool Flag { get; set; } + + public Entity2 E2; + public EntityAggregate(Entity1 e1, Entity2 e2) + { + EntityId = e1.EntityId; + Data = e1.Data; + CreationTime = e1.CreationTime; + Flag = e1.Flag; + E2 = e2; + } + } + + class Program + { + /// Задача: + /// Даны два массива сущностей, + /// Сущности из первого массива содержат идентификаторы сущностей из второго массива, + /// Реализовать Join, обьединяющий данные сущностей из двух массивов, + /// Вернуть массив EntityAggregate, содержащий обьединённые данные, + /// предварительно отфильтровав сущности из первого массива по entity.Flag == hasFlag + /// + /// Пример работы: + /// + /// Входные данные: + /// e1 = Entity1(EntityId = 1, + /// Data = "123", + /// Flag = false, + /// Entity2Id = 2, + /// CreationDate = 29.10.1999) + /// + /// e2 = Entity2(EntityId = 2, + /// Data = 2.4, + /// CreationDate = 30.10.1999) + /// + /// hasFlag = false + /// + /// Возвращаемое значение: + /// EntityAggregate(EntityId = 1, + /// Data = "123", + /// Flag = false, + /// CreationDate = 29.10.1999, + /// Entity2 = Entity2(EntityId = 2, + /// Data = 2.4, + /// CreationDate = 30.10.1999) + + static EntityAggregate[] Join(Entity1[] e1, Entity2[] e2, bool hasFlag) + { + var entityQueue = new Queue(); + for (int i = 0; i < e1.Length; i++) + { + if (e1[i].Flag == hasFlag) + { + if (e1[i].Entity2Id == null) + { + entityQueue.Enqueue(new EntityAggregate(e1[i], null)); + } + else + { + for (int j = 0; j < e2.Length; j++) + { + if (e1[i].Entity2Id == e2[j].EntityId) + { + entityQueue.Enqueue(new EntityAggregate(e1[i], e2[j])); + } + } + } + } + } + return entityQueue.ToArray(); + } + } +} \ No newline at end of file diff --git a/Task/Task/Task.csproj b/Task/Task/Task.csproj new file mode 100644 index 0000000..2082704 --- /dev/null +++ b/Task/Task/Task.csproj @@ -0,0 +1,8 @@ + + + + Exe + net5.0 + + +