Skip to content

Commit f14cd92

Browse files
committed
Update sample for LINQ tutorial
Update the sample code and snippet tags for the LINQ tutorial
1 parent 87c026d commit f14cd92

File tree

10 files changed

+300
-299
lines changed

10 files changed

+300
-299
lines changed

docs/csharp/programming-guide/classes-and-structs/how-to-use-implicitly-typed-local-variables-and-arrays-in-a-query-expression.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ You can use implicitly typed local variables whenever you want the compiler to d
2525

2626
## See also
2727

28-
- [Extension Methods](./extension-methods.md)
28+
- [Extension members](./extension-methods.md)
2929
- [LINQ (Language-Integrated Query)](../../linq/index.md)
3030
- [LINQ in C#](../../linq/index.md)
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
namespace UnusedCode;
2+
3+
using LinqFaroShuffle;
4+
internal class InterimSteps
5+
{
6+
// <StepOne>
7+
static IEnumerable<string> Suits()
8+
{
9+
yield return "clubs";
10+
yield return "diamonds";
11+
yield return "hearts";
12+
yield return "spades";
13+
}
14+
15+
static IEnumerable<string> Ranks()
16+
{
17+
yield return "two";
18+
yield return "three";
19+
yield return "four";
20+
yield return "five";
21+
yield return "six";
22+
yield return "seven";
23+
yield return "eight";
24+
yield return "nine";
25+
yield return "ten";
26+
yield return "jack";
27+
yield return "queen";
28+
yield return "king";
29+
yield return "ace";
30+
}
31+
// </StepOne>
32+
33+
private static void InitialMain()
34+
{
35+
// <StepTwo>
36+
var startingDeck = from s in Suits()
37+
from r in Ranks()
38+
select (Suit: s, Rank: r);
39+
40+
// Display each card that we've generated and placed in startingDeck in the console
41+
foreach (var card in startingDeck)
42+
{
43+
Console.WriteLine(card);
44+
}
45+
// </StepTwo>
46+
47+
// <StepThree>
48+
var top = startingDeck.Take(26);
49+
var bottom = startingDeck.Skip(26);
50+
// </StepThree>
51+
52+
}
53+
54+
private void StartShuffling()
55+
{
56+
// <StepThree>
57+
var startingDeck = from s in Suits()
58+
from r in Ranks()
59+
select (Suit: s, Rank: r);
60+
61+
// Display each card that we've generated and placed in startingDeck in the console
62+
foreach (var card in startingDeck)
63+
{
64+
Console.WriteLine(card);
65+
}
66+
67+
var top = startingDeck.Take(26);
68+
var bottom = startingDeck.Skip(26);
69+
// </StepThree>
70+
71+
// <StepFive>
72+
var shuffledDeck = top.InterleaveSequenceWith(bottom);
73+
74+
foreach (var c in shuffledDeck)
75+
{
76+
Console.WriteLine(c);
77+
}
78+
// </StepFive>
79+
}
80+
81+
private void CompareSequences()
82+
{
83+
// <StepSix>
84+
var startingDeck = from s in Suits()
85+
from r in Ranks()
86+
select (Suit: s, Rank: r);
87+
88+
// Display each card that we've generated and placed in startingDeck in the console
89+
foreach (var card in startingDeck)
90+
{
91+
Console.WriteLine(card);
92+
}
93+
94+
var top = startingDeck.Take(26);
95+
var bottom = startingDeck.Skip(26);
96+
97+
var shuffledDeck = top.InterleaveSequenceWith(bottom);
98+
99+
var times = 0;
100+
// We can re-use the shuffle variable from earlier, or you can make a new one
101+
shuffledDeck = startingDeck;
102+
do
103+
{
104+
shuffledDeck = shuffledDeck.Take(26).InterleaveSequenceWith(shuffledDeck.Skip(26));
105+
106+
foreach (var card in shuffledDeck)
107+
{
108+
Console.WriteLine(card);
109+
}
110+
Console.WriteLine();
111+
times++;
112+
113+
} while (!startingDeck.SequenceEquals(shuffledDeck));
114+
115+
Console.WriteLine(times);
116+
// <StepSix>
117+
}
118+
119+
private void AddLogging()
120+
{
121+
// <StepSeven>
122+
var startingDeck = (from s in Suits().LogQuery("Suit Generation")
123+
from r in Ranks().LogQuery("Rank Generation")
124+
select (Suit: s, Rank: r)).LogQuery("Starting Deck");
125+
126+
foreach (var c in startingDeck)
127+
{
128+
Console.WriteLine(c);
129+
}
130+
131+
Console.WriteLine();
132+
var times = 0;
133+
var shuffle = startingDeck;
134+
135+
do
136+
{
137+
// Out shuffle
138+
/*
139+
shuffle = shuffle.Take(26)
140+
.LogQuery("Top Half")
141+
.InterleaveSequenceWith(shuffle.Skip(26)
142+
.LogQuery("Bottom Half"))
143+
.LogQuery("Shuffle");
144+
*/
145+
146+
// In shuffle
147+
shuffle = shuffle.Skip(26).LogQuery("Bottom Half")
148+
.InterleaveSequenceWith(shuffle.Take(26).LogQuery("Top Half"))
149+
.LogQuery("Shuffle");
150+
151+
foreach (var c in shuffle)
152+
{
153+
Console.WriteLine(c);
154+
}
155+
156+
times++;
157+
Console.WriteLine(times);
158+
} while (!startingDeck.SequenceEquals(shuffle));
159+
160+
Console.WriteLine(times);
161+
// </StepSeven>
162+
}
163+
}
164+
165+
// <StepFour>
166+
public static class CardExtensions
167+
{
168+
extension<T>(IEnumerable<T> sequence)
169+
{
170+
public IEnumerable<T> InterleaveSequenceWith(IEnumerable<T> second)
171+
{
172+
// Your implementation goes here
173+
return default;
174+
}
175+
}
176+
}
177+
// </StepFour>
178+
179+

samples/snippets/csharp/getting-started/console-linq/console-linq.csproj renamed to docs/csharp/tutorials/snippets/console-linq/LInqFaroShuffle.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net8.0</TargetFramework>
5+
<TargetFramework>net10.0</TargetFramework>
66
<Nullable>enable</Nullable>
7+
<ImplicitUsings>enable</ImplicitUsings>
78
</PropertyGroup>
89

910
</Project>
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
using LinqFaroShuffle;
2+
3+
// <snippet4>
4+
IEnumerable<Suit> suits() => (Enum.GetValues(typeof(Suit)) as IEnumerable<Suit>)!;
5+
// </snippet4>
6+
7+
// <snippet5>
8+
IEnumerable<Rank> ranks() => (Enum.GetValues(typeof(Rank)) as IEnumerable<Rank>)!;
9+
// </snippet5>
10+
11+
// <snippet1>
12+
var startingDeck = (from s in suits().LogQuery("Suit Generation")
13+
from r in ranks().LogQuery("Value Generation")
14+
select new { Suit = s, Rank = r })
15+
.LogQuery("Starting Deck")
16+
.ToArray();
17+
18+
foreach (var c in startingDeck)
19+
{
20+
Console.WriteLine(c);
21+
}
22+
23+
Console.WriteLine();
24+
25+
var times = 0;
26+
var shuffle = startingDeck;
27+
28+
do
29+
{
30+
/*
31+
shuffle = shuffle.Take(26)
32+
.LogQuery("Top Half")
33+
.InterleaveSequenceWith(shuffle.Skip(26).LogQuery("Bottom Half"))
34+
.LogQuery("Shuffle")
35+
.ToArray();
36+
*/
37+
38+
shuffle = shuffle.Skip(26)
39+
.LogQuery("Bottom Half")
40+
.InterleaveSequenceWith(shuffle.Take(26).LogQuery("Top Half"))
41+
.LogQuery("Shuffle")
42+
.ToArray();
43+
44+
foreach (var c in shuffle)
45+
{
46+
Console.WriteLine(c);
47+
}
48+
49+
times++;
50+
Console.WriteLine(times);
51+
} while (!startingDeck.SequenceEquals(shuffle));
52+
53+
Console.WriteLine(times);
54+
// </snippet1>
55+
56+
// <snippet2>
57+
public enum Suit
58+
{
59+
Clubs,
60+
Diamonds,
61+
Hearts,
62+
Spades
63+
}
64+
// </snippet2>
65+
66+
// <snippet3>
67+
public enum Rank
68+
{
69+
Two,
70+
Three,
71+
Four,
72+
Five,
73+
Six,
74+
Seven,
75+
Eight,
76+
Nine,
77+
Ten,
78+
Jack,
79+
Queen,
80+
King,
81+
Ace
82+
}
83+
// </snippet3>
File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
using System.Collections.Generic;
2-
using System.IO;
1+
namespace LinqFaroShuffle;
32

4-
namespace LinqFaroShuffle
3+
public static class CardExtensions
54
{
6-
public static class Extensions
5+
extension<T>(IEnumerable<T> sequence)
76
{
8-
#region snippet1
9-
public static IEnumerable<T> InterleaveSequenceWith<T>
10-
(this IEnumerable<T> first, IEnumerable<T> second)
7+
// <snippet1>
8+
public IEnumerable<T> InterleaveSequenceWith(IEnumerable<T> second)
119
{
12-
var firstIter = first.GetEnumerator();
10+
var firstIter = sequence.GetEnumerator();
1311
var secondIter = second.GetEnumerator();
1412

1513
while (firstIter.MoveNext() && secondIter.MoveNext())
@@ -18,13 +16,12 @@ public static IEnumerable<T> InterleaveSequenceWith<T>
1816
yield return secondIter.Current;
1917
}
2018
}
21-
#endregion
19+
// </snippet1>
2220

23-
#region snippet2
24-
public static bool SequenceEquals<T>
25-
(this IEnumerable<T> first, IEnumerable<T> second)
21+
// <snippet2>
22+
public bool SequenceEquals(IEnumerable<T> second)
2623
{
27-
var firstIter = first.GetEnumerator();
24+
var firstIter = sequence.GetEnumerator();
2825
var secondIter = second.GetEnumerator();
2926

3027
while ((firstIter?.MoveNext() == true) && secondIter.MoveNext())
@@ -37,11 +34,10 @@ public static bool SequenceEquals<T>
3734

3835
return true;
3936
}
40-
#endregion
37+
// </snippet2>
4138

42-
#region snippet3
43-
public static IEnumerable<T> LogQuery<T>
44-
(this IEnumerable<T> sequence, string tag)
39+
// <snippet3>
40+
public IEnumerable<T> LogQuery(string tag)
4541
{
4642
// File.AppendText creates a new file if the file doesn't exist.
4743
using (var writer = File.AppendText("debug.log"))
@@ -51,6 +47,6 @@ public static IEnumerable<T> LogQuery<T>
5147

5248
return sequence;
5349
}
54-
#endregion
50+
// </snippet3>
5551
}
5652
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace LinqFaroShuffle;
2+
3+
// <snippet1>
4+
public sealed record PlayingCard(Suit CardSuit, Rank CardRank);
5+
// </snippet1>

0 commit comments

Comments
 (0)