Created
November 27, 2022 11:58
-
-
Save marcinnajder/0e0264c0d5a0acc8a219e93b8d36362b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Linq; | |
using System.Collections; | |
using System.Collections.Generic; | |
using System.Diagnostics.CodeAnalysis; | |
using System.Reflection; | |
using System.Threading; | |
using System.IO; | |
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Workshop.CSharp.Advanced.Tests")] | |
namespace Workshop.CSharp.Advanced | |
{ | |
class ZapisanoOsobeWBazieEventArgs : EventArgs | |
{ | |
public int IdOsoby { get; set; } | |
} | |
class Comarch | |
{ | |
public Comarch GetEnumerator() => this; | |
public string Current { get => "marcin"; } | |
public bool MoveNext() => true; | |
} | |
class Program | |
{ | |
static void ExecuteAcionNTimes(int n, Action<int> cosDoZrobienia) | |
{ | |
for (int i = 0; i < n; i++) | |
{ | |
cosDoZrobienia.Invoke(i); | |
} | |
} | |
static bool Exists<T>(List<T> elementy, Func<T, bool> warunek) | |
{ | |
foreach (var element in elementy) | |
{ | |
if (warunek(element) == true) | |
{ | |
return true; | |
} | |
} | |
return false; | |
} | |
static T Find<T>(List<T> elementy, Func<T, bool> warunek) | |
{ | |
foreach (var element in elementy) | |
{ | |
if (warunek(element)) | |
{ | |
return element; | |
} | |
} | |
return default(T); | |
} | |
static IEnumerable<R> Zip<T1, T2, R>( | |
IEnumerable<T1> list1, | |
IEnumerable<T2> list2, | |
Func<T1, T2, R> konwerter) | |
{ | |
var iterator1 = list1.GetEnumerator(); | |
var iterator2 = list2.GetEnumerator(); | |
while (iterator1.MoveNext() && iterator2.MoveNext()) | |
{ | |
yield return konwerter(iterator1.Current, iterator2.Current); | |
} | |
} | |
static IEnumerable<T> FindAll<T>(IEnumerable<T> items, Func<T, bool> predicate) | |
{ | |
foreach (var item in items) | |
{ | |
if (predicate(item)) | |
{ | |
yield return item; | |
} | |
} | |
} | |
static IEnumerable<T> FindAll<T>(IEnumerable<T> items, Func<T, int, bool> predicate) | |
{ | |
int i = 0; | |
foreach (var item in items) | |
{ | |
if (predicate(item, i++)) | |
{ | |
yield return item; | |
} | |
} | |
} | |
static IEnumerable<R> ConvertAll<T, R>(IEnumerable<T> items, Func<T, R> converter) | |
{ | |
foreach (var item in items) | |
{ | |
yield return converter(item); | |
} | |
} | |
static IEnumerable<R> ConvertAll<T, R>(IEnumerable<T> items, Func<T, int, R> converter) | |
{ | |
int i = 0; | |
foreach (var item in items) | |
{ | |
yield return converter(item, i++); | |
} | |
} | |
static void ForEach<T>(List<T> items, Action<T> action) | |
{ | |
foreach (var item in items) | |
{ | |
action(item); | |
} | |
} | |
static A Fold<T, A>(IEnumerable<T> items, A seed, Func<A, T, A> aggregator) | |
{ | |
A total = seed; | |
foreach (var item in items) | |
{ | |
total = aggregator(total, item); | |
} | |
return total; | |
} | |
static IEnumerable<R> Collect<T, R>(IEnumerable<T> items, Func<T, IEnumerable<R>> getSubItems) | |
{ | |
foreach (var item in items) | |
{ | |
var subItems = getSubItems(item); | |
foreach (var subItem in subItems) | |
{ | |
yield return subItem; | |
} | |
} | |
} | |
class Osoba | |
{ | |
public int Id { get; set; } | |
public string Name { get; set; } | |
public List<Adres> Adresy { get; set; } | |
} | |
class Adres | |
{ | |
public string City { get; set; } | |
} | |
static void WystarujZadanieJutro(Action<DateTime> zadanie) | |
{ | |
var t = new Thread(() => | |
{ | |
Thread.Sleep(1000); | |
zadanie(DateTime.Now); | |
}); | |
t.Start(); | |
} | |
private static void asdasdadasdasdasdadad(DateTime s) | |
{ | |
} | |
static IEnumerable<int> Return123() | |
{ | |
var result = new List<int>(); | |
result.Add(11); | |
result.Add(1100); | |
return result; | |
} | |
static IEnumerable<int> Return123_() | |
{ | |
// var result = new List<int>(); | |
yield return 11; | |
yield return 1100; | |
// return result; | |
} | |
static IEnumerable<int> Psikus() | |
{ | |
while (true) | |
{ | |
yield return 666; | |
} | |
} | |
static IEnumerable<int> Range(int start, int count) | |
{ | |
var end = start + count; | |
for (int i = start; i < end; i++) | |
{ | |
yield return i; | |
} | |
} | |
static IEnumerable<T> Top<T>(IEnumerable<T> items, int count) | |
{ | |
var counter = 0; | |
foreach (var item in items) | |
{ | |
if (counter++ >= count) | |
{ | |
yield break; | |
} | |
yield return item; | |
} | |
} | |
IEnumerable<FileInfo> GetFileSequence(string folderPath) | |
{ | |
yield break; | |
} | |
static void Main(String[] args) | |
{ | |
// var aaa = Directory.GetFiles("c:/"); | |
// var aaa123 = new FileInfo("c:/asd.as.asd.ads.asdasd.txtx"); | |
// var aa = GetFileSequence("c:/"); | |
// var a0 = Top(new[] { "mama", "tata", "ciocia" }, 0).ToArray(); | |
// var a1 = Top(new[] { "mama", "tata", "ciocia" }, 1).ToArray(); | |
// var a2 = Top(new[] { "mama", "tata", "ciocia" }, 2).ToArray(); | |
// var a3 = Top(new[] { "mama", "tata", "ciocia" }, 3).ToArray(); | |
// var a4 = Top(new[] { "mama", "tata", "ciocia" }, 4).ToArray(); | |
// var a5 = Top(new[] { "mama", "tata", "ciocia" }, 5).ToArray(); | |
// //var items = Return123_(); | |
// var items = Range(1, 3); | |
// var itemsP = items.ToList(); | |
// foreach (var item in itemsP) | |
// { | |
// Console.WriteLine(item); | |
// } | |
// foreach (var item in items) | |
// { | |
// Console.WriteLine(item + " !"); | |
// } | |
// var chodziolek = items.GetEnumerator(); | |
// chodziolek.MoveNext(); // true | |
// chodziolek.MoveNext(); // true | |
// chodziolek.MoveNext(); // false | |
// chodziolek.MoveNext(); | |
// chodziolek.MoveNext(); | |
// chodziolek.MoveNext(); | |
var osoby = new List<Osoba> | |
{ | |
new Osoba() | |
{ | |
Id = 1, | |
Name = "Marcin", | |
Adresy = new List<Adres> | |
{ | |
new Adres { City = "Wroclaw"} , | |
new Adres { City = "Krakow"} | |
} | |
}, | |
new Osoba() { | |
Id = 2, | |
Name = "Gosia", | |
Adresy = new List<Adres> | |
{ | |
new Adres { City = "Warszawa"} , | |
}} | |
}; | |
var temp1 = FindAll(osoby, o => o.Adresy.Count >= 2); | |
var temp2 = ConvertAll(temp1, o => o.Id); | |
var temp3 = Top(temp2, 10); | |
foreach (var id in temp3) | |
{ | |
} | |
// var osobyZ2Adresami = osoby | |
// .FindAll(o => o.Adresy.Count >= 2) | |
// .ConvertAll(o => o.Id); | |
// int counter = 0; | |
// foreach (var osoba in osoby) | |
// { | |
// if (osoba.Adresy.Count >= 2) // WHERE | |
// { | |
// if (counter++ < 100) | |
// { | |
// /// o.Id | |
// } | |
// else | |
// { | |
// break; | |
// } | |
// } | |
// } | |
// var dic = Fold(osoby, new Dictionary<int, Osoba>(), (dic, o) => | |
// { | |
// dic.Add(o.Id, o); | |
// return dic; | |
// }); | |
// var a3 = Fold( | |
// new List<int> { 1, 2, 3, 4, 66, 7, 8 }, | |
// 0, | |
// (prev, current) => prev + current); | |
// int a = new int[] { 1, 2, 3, 4, 66, 7, 8 }.Aggregate( | |
// 0, (prev, current) => prev + current); | |
// int a2 = new int[] { 1, 2, 3, 4, 66, 7, 8 }.Aggregate( | |
// int.MinValue, | |
// (prev, current) => Math.Max(prev, current)); | |
// var names = new List<string>() | |
// { | |
// "marcin", "gosia", "janusz", null | |
// }; | |
// var temp1 = FindAll(names, n => n != null); | |
// var temp2 = ConvertAll(temp1, (n, index) => index + ". " + n.Length); | |
//ForEach(temp2, Console.WriteLine); | |
// names | |
// .FindAll(n => n != null) // WHERE | |
// .ConvertAll(n => n.Length) // SELECT | |
// .ForEach(x => | |
// { | |
// //todo: ... | |
// }); | |
var datyUrodzenia = new List<DateTime>() | |
{ | |
new DateTime(2000,1,1), | |
new DateTime(2004,1,1), | |
new DateTime(203,1,1) | |
}; | |
} | |
private static void WypiszZeCSharpJestOk(int x) | |
{ | |
Console.WriteLine(" C# jest ok " + x); | |
} | |
} | |
} | |
// Runner.StartRepl(Assembly.GetExecutingAssembly()); | |
// Generics.RunZipUnzip(); | |
// Delegates.RunZip(); | |
// Delegates.RunCompose(); | |
// Iterators.RunZip(); | |
// Iterators.RunFileSequence(); | |
// Runner.ExecuteAll(Assembly.GetExecutingAssembly()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment