C Sharp: Difference between revisions
No edit summary |
No edit summary |
||
Line 15: | Line 15: | ||
{ | { | ||
// Define a regular expression for repeated words. | // Define a regular expression for repeated words. | ||
Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b" | Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b"); | ||
// Define a test string. | // Define a test string. | ||
string text = "The the quick brown fox fox jumps over the lazy dog dog."; | string text = "The the quick brown fox fox jumps over the lazy dog dog."; | ||
// Find | // Find match. | ||
Match match = rx.Match(text); | |||
// | // Iterature through captures | ||
foreach (Capture c in match.captures) { | |||
Console.WriteLine("Captured {c.Value}"); | |||
} | } | ||
} | } |
Revision as of 20:24, 20 September 2019
Usage
Regular Expressions
Regex
Reference
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main ()
{
// Define a regular expression for repeated words.
Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b");
// Define a test string. <br />
string text = "The the quick brown fox fox jumps over the lazy dog dog.";
<br />
// Find match.
Match match = rx.Match(text);
// Iterature through captures
foreach (Capture c in match.captures) {
Console.WriteLine("Captured {c.Value}");
}
}
}
Multithreading
Theadpool
C# has a convenient TheadPool class in the System.Threading namespace.
class TestClass {
static void Main(string[] args) {
int numberOfTasks = 10;
int tasksRemaining = 10;
// This is similar to a mutex.
ManualResetEvent finishedHandle = new ManualResetEvent(false);
for (int i = 0; i < numberOfTasks; i++) {
int j = i;
ThreadPool.QueueUserWorkItem(_ => {
try {
// Do something time consuming or resource intensive.
// Do not use i here. You can use j instead.
} catch (System.Exception e) {
// Print Stack Trace
} finally {
if (Interlocked.Decrement(ref tasksRemaining) == 0) {
finishedHandle.Set();
}
}
});
}
// Blocking wait.
finishedHandle.WaitOne();
}
}