<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: seonglinchua</title>
    <description>The latest articles on DEV Community by seonglinchua (@seonglinchua).</description>
    <link>https://dev.to/seonglinchua</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F226597%2F0d279392-c76b-471b-9f4d-385304277010.jpeg</url>
      <title>DEV Community: seonglinchua</title>
      <link>https://dev.to/seonglinchua</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seonglinchua"/>
    <language>en</language>
    <item>
      <title>📊 From Crystal Reports to Modern Reporting: My Journey</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Mon, 07 Jul 2025 15:12:54 +0000</pubDate>
      <link>https://dev.to/seonglinchua/from-crystal-reports-to-modern-reporting-my-journey-388j</link>
      <guid>https://dev.to/seonglinchua/from-crystal-reports-to-modern-reporting-my-journey-388j</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"What began as drag-and-drop reporting became a quest for reusable, developer-first designs."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🕰️ The Legacy: Crystal Reports
&lt;/h2&gt;

&lt;p&gt;When I first started building enterprise apps, &lt;strong&gt;Crystal Reports&lt;/strong&gt; was the default solution for generating structured reports.&lt;/p&gt;

&lt;p&gt;It offered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drag-and-drop design&lt;/li&gt;
&lt;li&gt;Easy integration with &lt;code&gt;.xsd&lt;/code&gt; datasets&lt;/li&gt;
&lt;li&gt;Simple binding for stored procedures&lt;/li&gt;
&lt;li&gt;Visual formatting with subreports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But with time, the cracks showed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Difficult versioning and collaboration
&lt;/li&gt;
&lt;li&gt;🐌 Slow preview and rendering for large reports
&lt;/li&gt;
&lt;li&gt;🧱 Static, UI-bound design process
&lt;/li&gt;
&lt;li&gt;🧩 Too much friction for CI/CD and automation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💥 The Breaking Point
&lt;/h2&gt;

&lt;p&gt;Once the system grew:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My stored procedures were returning &lt;strong&gt;30+ tables&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Every report revision required &lt;strong&gt;opening a UI designer&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Binding logic was &lt;strong&gt;opaque and brittle&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I needed a better solution — one that aligned with how &lt;strong&gt;modern software is built&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔁 The Shift: Code-Driven Reporting
&lt;/h2&gt;

&lt;p&gt;I explored multiple options. My goal was clear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ Build reports &lt;strong&gt;as code&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ Enable reuse, automation, and testability&lt;br&gt;&lt;br&gt;
✅ Avoid proprietary formats&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  I evaluated:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🧾 &lt;strong&gt;iText7&lt;/strong&gt; – PDF generation with full C# control
&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;EPPlus&lt;/strong&gt; – Excel output with charts &amp;amp; formatting
&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Telerik Reporting&lt;/strong&gt; – clean UI + developer-friendly structure
&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;FastReport.NET&lt;/strong&gt; – balance between designer + code integration&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 My New Approach
&lt;/h2&gt;

&lt;p&gt;Here’s what reporting looks like for me now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define &lt;strong&gt;report layouts&lt;/strong&gt; in JSON or config files
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Dapper&lt;/strong&gt; to fetch data from DB
&lt;/li&gt;
&lt;li&gt;Generate reports via &lt;strong&gt;C# services&lt;/strong&gt; (console/web API)
&lt;/li&gt;
&lt;li&gt;Store output as &lt;strong&gt;PDF / XLSX&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Log execution results using &lt;strong&gt;Serilog&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything is &lt;strong&gt;version-controlled&lt;/strong&gt;, &lt;strong&gt;headless&lt;/strong&gt;, and CI-ready.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Report Flow Now Looks Like This:
&lt;/h2&gt;

&lt;p&gt;No UI needed. No designer crashes. Just reproducible reports every time.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What I Gained
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Automation-friendly workflows
&lt;/li&gt;
&lt;li&gt;✅ Easy to plug into jobs or web APIs
&lt;/li&gt;
&lt;li&gt;✅ Code-first design = easier collaboration
&lt;/li&gt;
&lt;li&gt;✅ No more hidden data bindings
&lt;/li&gt;
&lt;li&gt;✅ Reusable across systems (dashboard, batch jobs, ad-hoc UI)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📎 Advice for Devs Still Using Crystal Reports
&lt;/h2&gt;

&lt;p&gt;Crystal Reports still works — but if you want to scale or automate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start separating &lt;strong&gt;data retrieval&lt;/strong&gt; from &lt;strong&gt;visual design&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Use reporting as an &lt;strong&gt;output, not a tool&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Explore iText7 or Telerik Reporting if you're C# based&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And most importantly, think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How would this report behave in a headless system?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔮 What’s Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Building a &lt;strong&gt;web-based report viewer&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Exploring &lt;strong&gt;Power BI / Tableau&lt;/strong&gt; for advanced analytics
&lt;/li&gt;
&lt;li&gt;Considering &lt;strong&gt;report-as-code&lt;/strong&gt; tools like ReportSharp
&lt;/li&gt;
&lt;li&gt;Eventually integrating AI-driven &lt;strong&gt;report summaries&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 How About You?
&lt;/h2&gt;

&lt;p&gt;Are you still using Crystal Reports?&lt;br&gt;&lt;br&gt;
Have you moved to something more modern?&lt;/p&gt;

&lt;p&gt;Drop your experience below — or share a screenshot of your setup!&lt;br&gt;&lt;br&gt;
Let’s swap ideas.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>reporting</category>
      <category>architecture</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🧾 How I Rebuilt My eAdvice System with C# Console Apps</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Sun, 06 Jul 2025 14:36:26 +0000</pubDate>
      <link>https://dev.to/seonglinchua/how-i-rebuilt-my-eadvice-system-with-c-console-apps-4cm8</link>
      <guid>https://dev.to/seonglinchua/how-i-rebuilt-my-eadvice-system-with-c-console-apps-4cm8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“I didn’t modernize my stack. I rethought my system.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  👋 Background
&lt;/h2&gt;

&lt;p&gt;I was tasked with supporting and enhancing an eAdvice distribution system at my bank.&lt;br&gt;&lt;br&gt;
The problem? It was built on &lt;strong&gt;tight coupling&lt;/strong&gt;, &lt;strong&gt;manual triggers&lt;/strong&gt;, and &lt;strong&gt;legacy UI&lt;/strong&gt; dependencies.&lt;/p&gt;

&lt;p&gt;The workflow was error-prone, slow, and hard to scale.&lt;br&gt;&lt;br&gt;
So, I tore it down — and rebuilt it as a &lt;strong&gt;headless C# console application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is how I did it, and why you might want to do the same.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What Was Wrong with the Old System?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;⚠️ UI tightly coupled with core logic
&lt;/li&gt;
&lt;li&gt;🐢 Manual click events to fetch data
&lt;/li&gt;
&lt;li&gt;🧷 Dependencies that made automation nearly impossible
&lt;/li&gt;
&lt;li&gt;❌ No logging or audit trail
&lt;/li&gt;
&lt;li&gt;📎 Painful to manage errors and retries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I knew this wasn’t sustainable — especially with daily deadlines and growing compliance needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧱 The Headless Approach
&lt;/h2&gt;

&lt;p&gt;I rebuilt everything around this principle:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Let the logic run without needing to be seen."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Key Design Decisions:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Convert UI code behind into reusable &lt;strong&gt;services&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Store configs in &lt;strong&gt;JSON files&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;Serilog&lt;/strong&gt; for structured logging
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Task Scheduler&lt;/strong&gt; to automate execution
&lt;/li&gt;
&lt;li&gt;Isolate &lt;strong&gt;mailing list fetch&lt;/strong&gt;, &lt;strong&gt;PDF mapping&lt;/strong&gt;, and &lt;strong&gt;Infobip sending&lt;/strong&gt; into separate components
&lt;/li&gt;
&lt;li&gt;Capture every &lt;strong&gt;success/failure&lt;/strong&gt; in a reconciliation table&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ Technologies Used
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Tool/Lib&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core app&lt;/td&gt;
&lt;td&gt;C# .NET Console App&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DB access&lt;/td&gt;
&lt;td&gt;Dapper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logging&lt;/td&gt;
&lt;td&gt;Serilog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File parsing&lt;/td&gt;
&lt;td&gt;EPPlus, iText7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email sending&lt;/td&gt;
&lt;td&gt;Infobip Email API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduling&lt;/td&gt;
&lt;td&gt;Windows Task Scheduler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Config&lt;/td&gt;
&lt;td&gt;appsettings.json + ENV overrides&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧩 Modular Workflow
&lt;/h2&gt;

&lt;p&gt;Each step was designed as an &lt;strong&gt;isolated module&lt;/strong&gt;:&lt;/p&gt;




&lt;h2&gt;
  
  
  🪛 Dev-Friendly Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Logs are written both to file and console with timestamps.&lt;/li&gt;
&lt;li&gt;The app supports &lt;code&gt;--dryrun&lt;/code&gt; mode for safe testing.&lt;/li&gt;
&lt;li&gt;Failures are automatically retried in the next run.&lt;/li&gt;
&lt;li&gt;Configs can be changed without recompiling the app.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✨ Results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ System now runs &lt;strong&gt;unattended&lt;/strong&gt; every day
&lt;/li&gt;
&lt;li&gt;✅ Reconciliation and error handling became transparent
&lt;/li&gt;
&lt;li&gt;✅ No more relying on fragile UIs
&lt;/li&gt;
&lt;li&gt;✅ Easy to support multiple advice types (e.g., PWM, V8)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔮 What’s Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Adding &lt;strong&gt;queue retry logic&lt;/strong&gt; for failed emails
&lt;/li&gt;
&lt;li&gt;Creating a &lt;strong&gt;web dashboard&lt;/strong&gt; for ad-hoc resend and report lookup
&lt;/li&gt;
&lt;li&gt;Exploring &lt;strong&gt;cloud-based job runners&lt;/strong&gt; for scalability
&lt;/li&gt;
&lt;li&gt;Plugging in &lt;strong&gt;GenAI classification&lt;/strong&gt; for incoming requests&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙌 Your Turn
&lt;/h2&gt;

&lt;p&gt;Have you turned a legacy system into something lean and modern?&lt;br&gt;&lt;br&gt;
Ever tried headless console automation in production?&lt;/p&gt;

&lt;p&gt;Drop your experience below — or ask me anything about this build.&lt;br&gt;&lt;br&gt;
I’ll be sharing more posts like this daily 👇&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>automation</category>
      <category>banking</category>
      <category>architecture</category>
    </item>
    <item>
      <title>🧠 Headless Architecture – The Unknown Gem That Supercharged My Automation Projects</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Sat, 05 Jul 2025 03:29:50 +0000</pubDate>
      <link>https://dev.to/seonglinchua/headless-architecture-the-unknown-gem-that-supercharged-my-automation-projects-hic</link>
      <guid>https://dev.to/seonglinchua/headless-architecture-the-unknown-gem-that-supercharged-my-automation-projects-hic</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Sometimes, the most powerful tools aren't shiny frameworks, but silent design decisions."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  👋 Introduction
&lt;/h2&gt;

&lt;p&gt;If you're still tightly coupling your UI with your backend, you're probably wasting time and limiting reusability. I discovered this the hard way — until I stumbled upon &lt;strong&gt;headless architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Not through a textbook.&lt;br&gt;&lt;br&gt;
Not from a YouTube guru.&lt;br&gt;&lt;br&gt;
But from trying to automate a stubborn legacy system.&lt;/p&gt;

&lt;p&gt;This post is about that journey — and why &lt;strong&gt;headless design&lt;/strong&gt; might be the &lt;strong&gt;underrated gem&lt;/strong&gt; you're not using enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 What Is Headless Architecture?
&lt;/h2&gt;

&lt;p&gt;Headless architecture is a &lt;strong&gt;decoupled design&lt;/strong&gt; where the backend logic is &lt;strong&gt;independent of the frontend UI&lt;/strong&gt;. You can trigger services, logic, or workflows &lt;strong&gt;without needing a UI to exist or be loaded&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;UI optional, logic unstoppable.&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💡 Why I Shifted to Headless
&lt;/h2&gt;

&lt;p&gt;I was building a financial statement distribution system using C# and Windows Forms. It worked — but everything was &lt;strong&gt;tightly coupled&lt;/strong&gt;, which made:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💣 Automation impossible without UI hacks
&lt;/li&gt;
&lt;li&gt;🐢 Testing painfully slow
&lt;/li&gt;
&lt;li&gt;🔁 Reuse nearly zero&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I &lt;strong&gt;refactored the core logic&lt;/strong&gt; into a headless service.&lt;br&gt;&lt;br&gt;
The result?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Runs as a scheduled console app
&lt;/li&gt;
&lt;li&gt;✅ Logging became modular (Serilog FTW)
&lt;/li&gt;
&lt;li&gt;✅ Can trigger actions from CLI, Task Scheduler, or API&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔍 The "Unknown Gem" Part
&lt;/h2&gt;

&lt;p&gt;Nobody talks about headless design when discussing .NET console apps or automation. It’s often overshadowed by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microservices
&lt;/li&gt;
&lt;li&gt;Serverless
&lt;/li&gt;
&lt;li&gt;Dockerized containers
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in truth, &lt;strong&gt;headless thinking is foundational&lt;/strong&gt; to those.&lt;/p&gt;

&lt;p&gt;It made me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Think in services
&lt;/li&gt;
&lt;li&gt;Decouple logic from presentation
&lt;/li&gt;
&lt;li&gt;Automate without fear of UI breakage&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ How I Designed It
&lt;/h2&gt;

&lt;p&gt;Here's a simplified structure of my architecture:&lt;/p&gt;

&lt;h3&gt;
  
  
  💻 Stack Used:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;C# .NET Console App&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serilog&lt;/strong&gt; for logging
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dapper&lt;/strong&gt; for database
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON config files&lt;/strong&gt; for environments
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows Task Scheduler&lt;/strong&gt; for automation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Benefits I Didn't Expect
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔁 Easier unit testing &amp;amp; mocking
&lt;/li&gt;
&lt;li&gt;💻 Platform-agnostic execution
&lt;/li&gt;
&lt;li&gt;⚡️ Fast iteration on logic
&lt;/li&gt;
&lt;li&gt;🧩 UI became optional plugin
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✨ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you're a developer juggling automation, dashboards, or backend logic, consider designing &lt;strong&gt;headless-first&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You don’t need React, Docker, or Kubernetes to start.&lt;br&gt;&lt;br&gt;
Just &lt;strong&gt;decouple&lt;/strong&gt; your logic and build with flexibility in mind.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Over to You
&lt;/h2&gt;

&lt;p&gt;Have you tried headless design in your projects?&lt;br&gt;&lt;br&gt;
Is there an “unknown gem” in your dev journey you'd recommend?&lt;/p&gt;

&lt;p&gt;Drop a comment below. Let’s surface the underrated wins 🛠️&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>architecture</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I'm Prepping for Interview Assessments — Smarter and Faster</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Sun, 25 May 2025 01:11:56 +0000</pubDate>
      <link>https://dev.to/seonglinchua/how-im-prepping-for-interview-assessments-smarter-and-faster-1458</link>
      <guid>https://dev.to/seonglinchua/how-im-prepping-for-interview-assessments-smarter-and-faster-1458</guid>
      <description>&lt;p&gt;As a developer juggling work and side projects, prepping for technical interviews can feel overwhelming. Instead of chasing perfection, I've built a workflow that combines &lt;strong&gt;brute force, learning patterns, and AI tools&lt;/strong&gt; — and it's helping me &lt;strong&gt;learn faster and stay sharp&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here’s how I’m doing it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Step 1: Categorize Topics
&lt;/h2&gt;

&lt;p&gt;I broke down all assessment questions into &lt;strong&gt;6 core categories&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Algorithms &amp;amp; Data Structures&lt;/li&gt;
&lt;li&gt;SQL &amp;amp; LINQ&lt;/li&gt;
&lt;li&gt;C#/.NET Core concepts&lt;/li&gt;
&lt;li&gt;DevOps &amp;amp; CI/CD&lt;/li&gt;
&lt;li&gt;System Design (microservices, REST, queues)&lt;/li&gt;
&lt;li&gt;AI Tools as Coding Accelerators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helps me track what to focus on weekly.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔁 Step 2: Start with Brute Force (Then Optimize)
&lt;/h2&gt;

&lt;p&gt;Instead of panicking over efficiency, I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write a brute-force version first&lt;/li&gt;
&lt;li&gt;Ensure it works for small cases&lt;/li&gt;
&lt;li&gt;Then search or iterate into the optimized version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes patterns like &lt;strong&gt;sliding window, hashmap, and recursion&lt;/strong&gt; much easier to understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Step 3: Practice Common Patterns
&lt;/h2&gt;

&lt;p&gt;Each day I choose a pattern like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔁 Sliding Window → Longest substring without repeat&lt;/li&gt;
&lt;li&gt;🧠 HashMap → Two Sum, Group Anagrams&lt;/li&gt;
&lt;li&gt;📦 Stack → Valid Parentheses&lt;/li&gt;
&lt;li&gt;📈 Binary Search → Search in rotated array&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And I solve 1–2 problems using &lt;strong&gt;brute first, then refactor&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Step 4: Weekly Mock Tests
&lt;/h2&gt;

&lt;p&gt;Once a week, I do a 25-minute simulation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 algorithm problem (LeetCode or Coderbyte)&lt;/li&gt;
&lt;li&gt;1 real-world backend question (design API or SQL query)&lt;/li&gt;
&lt;li&gt;Use Copilot + ChatGPT &lt;em&gt;only for hints, not answers&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives me &lt;strong&gt;realistic pressure&lt;/strong&gt; and makes me confident before the real test.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 Step 5: AI Tools that Help
&lt;/h2&gt;

&lt;p&gt;Here’s how I use AI ethically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔹 &lt;strong&gt;GitHub Copilot&lt;/strong&gt; to autocomplete loops, LINQ&lt;/li&gt;
&lt;li&gt;🔹 &lt;strong&gt;ChatGPT&lt;/strong&gt; to explain logic or debug&lt;/li&gt;
&lt;li&gt;🔹 &lt;strong&gt;Ollama&lt;/strong&gt; as a local GPT during offline prep&lt;/li&gt;
&lt;li&gt;🔹 Build a Notion doc of best prompts for reuse&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🗂️ Tools I Keep Open
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://leetcode.com/discuss/general-discussion/469180/leetcode-pattern" rel="noopener noreferrer"&gt;LeetCode Patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/" rel="noopener noreferrer"&gt;C# Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://visualgo.net/en" rel="noopener noreferrer"&gt;Visualgo.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;My own GitHub repo with reusable snippets&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎯 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;By working smarter (not longer), I’ve found myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing faster and cleaner code&lt;/li&gt;
&lt;li&gt;Explaining my solutions with more confidence&lt;/li&gt;
&lt;li&gt;Actually &lt;strong&gt;enjoying&lt;/strong&gt; the interview prep process&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you're prepping too — how do you learn best?&lt;br&gt;&lt;br&gt;
Let’s share strategies and improve together. 👇&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>interview</category>
      <category>productivity</category>
      <category>leetcode</category>
    </item>
    <item>
      <title>How I Use Google (Ethically) During Coding Assessments</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Sun, 25 May 2025 00:53:30 +0000</pubDate>
      <link>https://dev.to/seonglinchua/how-i-use-google-ethically-during-coding-assessments-56p1</link>
      <guid>https://dev.to/seonglinchua/how-i-use-google-ethically-during-coding-assessments-56p1</guid>
      <description>&lt;p&gt;As a software developer, I recently sat for a few technical assessments where I was allowed to use &lt;strong&gt;Google during the test&lt;/strong&gt;. At first, it felt like a cheat code — but I quickly realized that using Google &lt;strong&gt;effectively and ethically&lt;/strong&gt; is a skill of its own.&lt;/p&gt;

&lt;p&gt;Here’s how I’ve learned to &lt;strong&gt;maximize Google like an AI-powered co-pilot&lt;/strong&gt; while staying fully accountable for my work.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 1. Google Is Not a Solution Engine — It's a Clarifier
&lt;/h2&gt;

&lt;p&gt;I don’t use Google to find entire answers. Instead, I use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recall C# syntax or built-in methods (&lt;code&gt;Array.Find&lt;/code&gt;, &lt;code&gt;Dictionary.TryGetValue&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Look up error messages or edge-case behaviors&lt;/li&gt;
&lt;li&gt;Cross-check my logic pattern when stuck (e.g., “two pointer sliding window C#”)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 2. I Start With Brute Force — Then Search to Improve
&lt;/h2&gt;

&lt;p&gt;Every time I tackle a problem, I first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Break it down manually&lt;/li&gt;
&lt;li&gt;Sketch the brute-force logic&lt;/li&gt;
&lt;li&gt;Code the basic loop&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I Google:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“C# optimize dictionary lookup in loop”&lt;/em&gt;&lt;br&gt;&lt;br&gt;
or&lt;br&gt;&lt;br&gt;
&lt;em&gt;“C# LINQ sum of group by value”&lt;/em&gt;&lt;br&gt;&lt;br&gt;
to improve my solution — not replace it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧰 3. I Keep a Google-Efficient Toolkit Open
&lt;/h2&gt;

&lt;p&gt;When I know Google is allowed, I preload:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/" rel="noopener noreferrer"&gt;C# Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;✅ &lt;a href="https://linqsamples.com/" rel="noopener noreferrer"&gt;LINQ Examples&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;✅ My GitHub snippets (like reusable &lt;code&gt;TwoSum&lt;/code&gt; and &lt;code&gt;GroupBy&lt;/code&gt; patterns)&lt;/li&gt;
&lt;li&gt;✅ A Notion tab with common C# error fixes I’ve collected&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helps me &lt;strong&gt;reduce context switching&lt;/strong&gt; and stay in my zone.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚫 What I Avoid
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;❌ Copy-pasting from LeetCode without understanding
&lt;/li&gt;
&lt;li&gt;❌ Spending 5+ minutes reading deep discussions
&lt;/li&gt;
&lt;li&gt;❌ Searching for “the exact problem title” (easily detectable!)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ The Result
&lt;/h2&gt;

&lt;p&gt;I use Google &lt;strong&gt;like I use Copilot or ChatGPT&lt;/strong&gt; — as a &lt;strong&gt;thought extender&lt;/strong&gt;, not a replacement for problem-solving.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In fact, showing how I reason and improve my own logic with tools like Google has helped me perform better in interviews — and start better tech conversations during debriefs.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🗣️ How About You?
&lt;/h2&gt;

&lt;p&gt;Do you get access to Google during tests?&lt;br&gt;&lt;br&gt;
How do you make sure you're learning — not leaning?&lt;/p&gt;

&lt;p&gt;Let’s discuss 👇&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>interview</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Beyond the Surface: Understanding Different Application Types</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Thu, 15 May 2025 08:27:06 +0000</pubDate>
      <link>https://dev.to/seonglinchua/beyond-the-surface-understanding-different-application-types-3o13</link>
      <guid>https://dev.to/seonglinchua/beyond-the-surface-understanding-different-application-types-3o13</guid>
      <description>&lt;p&gt;Ever wondered about the different kinds of software that power our digital world? From the websites we browse to the tools running silently in the background, applications come in many forms, each designed for a specific purpose and environment.&lt;/p&gt;

&lt;p&gt;If you've ever looked at a list of project templates in a development environment, you might have seen terms like "Console Application," "Windows Form," or "Web Application." But what do these really mean? Let's break down some of the common application types you might encounter.&lt;/p&gt;

&lt;p&gt;We recently came across a list featuring several distinct application types. Let's take a closer look at what each one entails:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Web Application
&lt;/h3&gt;

&lt;p&gt;This is likely the most familiar type for most people. A web application is a program that lives on a remote server and is accessed through a web browser (like Chrome, Firefox, or Edge).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it is:&lt;/strong&gt; Software that runs on a server and is delivered to users over the internet or an intranet via a web browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Characteristics:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Accessed through a URL in a web browser.&lt;/li&gt;
&lt;li&gt;No installation required on the user's computer (beyond the browser itself).&lt;/li&gt;
&lt;li&gt;Updates are deployed centrally on the server.&lt;/li&gt;
&lt;li&gt;Accessible from various devices with a web connection.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Common Use Cases:&lt;/strong&gt; E-commerce websites (like Amazon), social media platforms (like Facebook or X), online banking portals, web-based email services (like Gmail), online productivity suites (like Google Workspace).&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Console Application
&lt;/h3&gt;

&lt;p&gt;Step away from the graphical interfaces for a moment. A console application is a program that runs within a text-based environment, like the Command Prompt in Windows or the Terminal in macOS/Linux.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it is:&lt;/strong&gt; A program that interacts with the user through text input and output in a command-line interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Characteristics:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Runs in a console window.&lt;/li&gt;
&lt;li&gt;Relies on text commands and displays text-based results.&lt;/li&gt;
&lt;li&gt;Typically lightweight and efficient.&lt;/li&gt;
&lt;li&gt;Often used for automation and scripting.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Common Use Cases:&lt;/strong&gt; Command-line utilities (like &lt;code&gt;ping&lt;/code&gt; or &lt;code&gt;ipconfig&lt;/code&gt;), scripts for system administration tasks, simple tools for processing data, background automation jobs.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Windows Form (WinForms)
&lt;/h3&gt;

&lt;p&gt;If you've used desktop applications on Windows, you've likely interacted with a Windows Forms application. This is a framework for building traditional desktop software with a graphical user interface.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it is:&lt;/strong&gt; A framework for creating desktop applications with a visual interface that runs directly on the Windows operating system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Characteristics:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Features windows, buttons, text boxes, and other graphical controls.&lt;/li&gt;
&lt;li&gt;Requires installation on a Windows machine.&lt;/li&gt;
&lt;li&gt;Provides a native Windows look and feel.&lt;/li&gt;
&lt;li&gt;Event-driven (responds to user actions like clicks and typing).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Common Use Cases:&lt;/strong&gt; Desktop productivity software (like Microsoft Word), business applications, utility programs, custom internal tools for Windows environments.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Web (Legacy)
&lt;/h3&gt;

&lt;p&gt;This term often pops up when dealing with older projects or technologies. "Web (Legacy)" typically refers to web applications built using older frameworks, structures, or coding practices that are no longer the current standard.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it is:&lt;/strong&gt; Refers to web applications built with older web development technologies or project patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Characteristics:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Based on technologies or structures that have been superseded by newer ones.&lt;/li&gt;
&lt;li&gt;May be maintained for compatibility with existing systems.&lt;/li&gt;
&lt;li&gt;Could potentially lack features or performance of modern web applications.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Common Use Cases:&lt;/strong&gt; Maintaining and updating existing older web applications, integrating with legacy systems that cannot be easily modernized.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Windows Service
&lt;/h3&gt;

&lt;p&gt;Working silently in the background, Windows Services are applications that perform tasks without a user interface. They are essential for operations that need to run continuously or on a schedule on a Windows system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it is:&lt;/strong&gt; An application that runs in the background on a Windows operating system, typically without a user interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Characteristics:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Runs independently of a user being logged in.&lt;/li&gt;
&lt;li&gt;Can be configured to start automatically with the system.&lt;/li&gt;
&lt;li&gt;Managed through the Windows Service Control Manager.&lt;/li&gt;
&lt;li&gt;Ideal for long-running tasks or background processes.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Common Use Cases:&lt;/strong&gt; Background data synchronization, scheduling automated tasks, monitoring system events, hosting services that other applications use.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Understanding these different application types is crucial for developers, project managers, and anyone involved in software development. The choice of application type depends heavily on the project's requirements, target audience, deployment environment, and desired user experience.&lt;/p&gt;

&lt;p&gt;Whether it's a website you visit daily, a script automating a task, a desktop program you use for work, or a silent service keeping things running smoothly, each application type plays a vital role in the digital landscape.&lt;/p&gt;

&lt;p&gt;What other application types have you encountered? Share your thoughts in the comments below!&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>applicationtypes</category>
      <category>webdev</category>
      <category>windowsapplications</category>
    </item>
    <item>
      <title>Common Use Cases for Button-Triggered Excel Macros</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Wed, 14 May 2025 03:18:59 +0000</pubDate>
      <link>https://dev.to/seonglinchua/common-use-cases-for-button-triggered-excel-macros-352d</link>
      <guid>https://dev.to/seonglinchua/common-use-cases-for-button-triggered-excel-macros-352d</guid>
      <description>&lt;p&gt;Excel is a powerful tool for data management and analysis, but its capabilities can be significantly extended through the use of macros. By attaching these small programs to buttons on your worksheet, you can create interactive tools and automate repetitive tasks with a simple click. This transforms a static spreadsheet into a dynamic application.&lt;/p&gt;

&lt;p&gt;Here are some common and effective use cases for button-triggered Excel macros:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Custom Calculators and Specialized Tools
&lt;/h2&gt;

&lt;p&gt;Beyond standard formulas, macros allow you to build complex, multi-step calculators or tools tailored to specific needs. A button can initiate a series of calculations based on user inputs, potentially involving conditional logic, lookups across different sheets, or interactions with external data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Financial Calculators:&lt;/strong&gt; Develop tools for loan amortization, investment analysis, budget forecasting, or specific financial modeling (like the "Loan Pre-Break Calculator" we discussed).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing and Quoting Tools:&lt;/strong&gt; Create interactive forms where sales teams can input product details and quantities, and a macro calculates the final price, including discounts, taxes, or custom fees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering or Scientific Tools:&lt;/strong&gt; Perform specialized calculations relevant to specific disciplines, displaying results in a user-friendly format.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Data Processing and Transformation
&lt;/h2&gt;

&lt;p&gt;Repetitive data manipulation tasks that would be tedious to perform manually can be automated with a button click.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Cleaning and Formatting:&lt;/strong&gt; A macro can quickly remove duplicate rows, standardize text formatting (e.g., capitalize names, remove extra spaces), split data from one column into multiple, or combine data from several columns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Reorganization:&lt;/strong&gt; Transform data layouts to meet specific requirements, such as pivoting data, unpivoting data, or rearranging columns and rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merging and Splitting Data:&lt;/strong&gt; Combine data from multiple spreadsheets into a master sheet or split a large dataset into smaller, separate files based on criteria.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Report Generation and Summarization
&lt;/h2&gt;

&lt;p&gt;Automate the process of creating regular reports, saving significant time and reducing the risk of manual errors.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated Report Assembly:&lt;/strong&gt; Gather data from various sheets or even external sources, perform necessary calculations or aggregations, and assemble the information into a predefined report template.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creating Summaries and Dashboards:&lt;/strong&gt; Update summary tables, pivot tables, and charts with the latest data at the push of a button, providing instant insights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generating Custom Reports:&lt;/strong&gt; Allow users to select parameters (e.g., date range, department), and a macro generates a tailored report based on their selections.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Workflow Automation
&lt;/h2&gt;

&lt;p&gt;Connect different steps of a process within Excel or interact with other applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated Email Sending:&lt;/strong&gt; Generate personalized emails based on data in rows (e.g., sending invoices, reminders, or notifications) and send them directly from Excel using Outlook automation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File Management:&lt;/strong&gt; Automate saving the current workbook in different formats (PDF, CSV), creating dated backups, or organizing files into specific folders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task Sequencing:&lt;/strong&gt; Execute a series of actions in a defined order, such as refreshing external data connections, performing calculations, updating a summary sheet, and then saving the workbook.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Data Import and Export
&lt;/h2&gt;

&lt;p&gt;Streamline the process of getting data into or out of your Excel workbook.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Importing Data from Files:&lt;/strong&gt; Read data from text files, CSV files, or other structured file types and import it into your worksheet, handling potential formatting issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exporting Data to Files:&lt;/strong&gt; Save specific ranges or entire sheets as new files in different formats for use in other applications or systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Interactive Forms and Guided Data Entry
&lt;/h2&gt;

&lt;p&gt;Create a more user-friendly interface for data input compared to simply typing into cells.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom Input Forms:&lt;/strong&gt; Design sections on your sheet with labels and controls (text boxes, dropdowns, checkboxes) to guide users on where and how to enter data. A button can then process this input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation and Feedback:&lt;/strong&gt; Use macros to perform complex data validation as users enter information and provide immediate feedback or error messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Button-triggered Excel macros are a versatile tool for anyone who spends significant time working with data in spreadsheets. They empower users to automate repetitive tasks, build custom tools, and streamline workflows directly within the familiar Excel environment. While they may not offer the same scalability or collaborative features as full web applications, for targeted use cases and users comfortable with Excel, they provide a powerful and accessible way to enhance productivity.&lt;/p&gt;

</description>
      <category>excelmacros</category>
      <category>automation</category>
      <category>businesstools</category>
      <category>vba</category>
    </item>
    <item>
      <title>GitHub Copilot Workflows for Modern Software Developers</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Tue, 13 May 2025 07:51:24 +0000</pubDate>
      <link>https://dev.to/seonglinchua/github-copilot-workflows-for-modern-software-developers-5ac9</link>
      <guid>https://dev.to/seonglinchua/github-copilot-workflows-for-modern-software-developers-5ac9</guid>
      <description>&lt;p&gt;GitHub Copilot has rapidly become an integral AI companion for software developers building modern applications, transforming various stages of the development lifecycle. Moving beyond simple code completion, Copilot now offers a suite of features that streamline workflows, enhance productivity, and assist with complex tasks within and outside the integrated development environment (IDE).&lt;/p&gt;

&lt;p&gt;At its core, GitHub Copilot acts as an AI pair programmer, providing real-time code suggestions as developers type. This capability, powered by large language models trained on a vast dataset of public code, significantly accelerates the writing of boilerplate code, repetitive patterns, and common functions. Developers can accept, modify, or ignore these suggestions, maintaining control while reducing the cognitive load of recalling syntax and structures.&lt;/p&gt;

&lt;p&gt;However, Copilot's utility in modern application development extends far beyond basic code completion. Here are some key workflows developers are adopting:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Accelerated Coding and Prototyping:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent Code Completion and Generation:&lt;/strong&gt; Copilot excels at suggesting lines, blocks, and even entire functions based on the surrounding code and comments. This speeds up the initial coding phase, allowing developers to translate ideas into code more rapidly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boilerplate Reduction:&lt;/strong&gt; For modern applications often involving various frameworks, libraries, and configurations, Copilot can quickly generate repetitive code structures, setup code, and standard patterns, freeing developers to focus on unique application logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning New Technologies:&lt;/strong&gt; When working with unfamiliar languages, frameworks, or APIs, Copilot can provide syntax suggestions, code examples, and usage patterns, lowering the barrier to entry and accelerating the learning process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Enhanced Code Understanding and Documentation:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code Explanation:&lt;/strong&gt; Using features like Copilot Chat, developers can ask for explanations of existing code snippets, functions, or even larger code structures. This is particularly valuable when navigating legacy codebases or collaborating on code written by others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Documentation Generation:&lt;/strong&gt; Copilot can assist in generating documentation, such as docstrings for functions and comments explaining complex logic, helping maintain code readability and making it easier for others to understand the codebase.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Streamlined Testing and Debugging:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test Case Generation:&lt;/strong&gt; Copilot can suggest and generate unit tests based on the code's functionality, helping developers achieve better test coverage and ensuring code quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debugging Assistance:&lt;/strong&gt; By analyzing error messages and code context, Copilot can offer suggestions for potential fixes and debugging steps, accelerating the process of identifying and resolving issues. Copilot's newer agent mode can even suggest terminal commands or tool executions to help with runtime errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Efficient Code Refactoring and Improvement:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Refactoring Suggestions:&lt;/strong&gt; Copilot can identify opportunities for code refactoring to improve readability, efficiency, and maintainability, and suggest alternative code implementations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adhering to Best Practices:&lt;/strong&gt; Based on its training data, Copilot can offer suggestions that align with common coding standards and design patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Elevated Code Review and Collaboration:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pull Request Summaries:&lt;/strong&gt; Copilot can generate summaries of changes within a pull request, highlighting the key modifications and impacted files, which aids reviewers in quickly understanding the scope of the changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Review Assistance:&lt;/strong&gt; AI-powered code review features can provide suggestions for improvements and potential issues directly within the pull request workflow, complementing human review efforts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Advanced Capabilities with Copilot's Evolution:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent Mode:&lt;/strong&gt; This newer feature allows Copilot to understand higher-level goals described in natural language and break them down into actionable steps, including suggesting and executing terminal commands and addressing errors autonomously within the development environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Model Support:&lt;/strong&gt; The ability to utilize different large language models (like various versions of Claude, Gemini, and GPT) allows developers to leverage the strengths of different models for specific tasks, potentially leading to more accurate or nuanced suggestions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copilot Edits:&lt;/strong&gt; This feature enables multi-file code changes based on a single Copilot Chat prompt, streamlining tasks that involve modifications across several files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copilot in the CLI:&lt;/strong&gt; Extending Copilot's assistance to the command line allows developers to get help with terminal commands, further reducing context switching.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integration and Customization:
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot integrates seamlessly with popular IDEs like VS Code, Visual Studio, and JetBrains IDEs, embedding its capabilities directly into the developer's workflow. Customization options, such as providing custom instructions in Copilot Chat, allow developers to tailor Copilot's responses to their specific preferences and project requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Considerations and Best Practices:
&lt;/h2&gt;

&lt;p&gt;While GitHub Copilot offers significant benefits, it's crucial to remember that it's a &lt;em&gt;copilot&lt;/em&gt;, not an &lt;em&gt;autopilot&lt;/em&gt;. Developers remain responsible for reviewing and validating all suggested code to ensure it meets requirements, is secure, and fits within the overall project architecture. Best practices include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Treating suggestions as recommendations:&lt;/strong&gt; Always review and understand the generated code before accepting it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Providing clear and specific prompts:&lt;/strong&gt; The quality of Copilot's output often depends on the clarity of the input, especially when using chat or agent modes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintaining context:&lt;/strong&gt; Keeping relevant files open in the IDE helps Copilot provide more accurate and context-aware suggestions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterating and refining:&lt;/strong&gt; Don't hesitate to rephrase prompts or request alternative suggestions if the initial output isn't suitable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In conclusion, GitHub Copilot is a powerful tool that is reshaping modern software development workflows. By leveraging its capabilities for code generation, understanding, testing, and review, developers can enhance their productivity, focus on more complex problem-solving, and ultimately build modern applications more efficiently. As AI capabilities continue to evolve, the integration of tools like Copilot into the developer toolkit will only become more sophisticated and impactful.&lt;/p&gt;

</description>
      <category>githubcopilot</category>
      <category>softwaredevelopment</category>
      <category>aitools</category>
      <category>developerproductivity</category>
    </item>
    <item>
      <title>Mastering Stack&lt;T&gt; in C# for Coding Interviews</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Sun, 11 May 2025 14:13:48 +0000</pubDate>
      <link>https://dev.to/seonglinchua/mastering-stack-in-c-for-coding-interviews-1na7</link>
      <guid>https://dev.to/seonglinchua/mastering-stack-in-c-for-coding-interviews-1na7</guid>
      <description>&lt;h2&gt;
  
  
  🧱 Stack in C# — Solving Problems the LIFO Way
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;Stack&amp;lt;T&amp;gt;&lt;/code&gt; is a &lt;strong&gt;Last-In-First-Out (LIFO)&lt;/strong&gt; collection — the last element added is the first one removed. It's commonly used in parsing, expression evaluation, and backtracking.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ When to Use Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Why Use Stack&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reversing elements&lt;/td&gt;
&lt;td&gt;Natural LIFO behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nested structures / matching&lt;/td&gt;
&lt;td&gt;e.g., parentheses, XML, recursion stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backtracking&lt;/td&gt;
&lt;td&gt;Push state, pop to revert&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Undo features&lt;/td&gt;
&lt;td&gt;Store previous states&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ✍️ Declaring and Using Stack
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;        &lt;span class="c1"&gt;// Add to top&lt;/span&gt;
&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Peek&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Peek top (20)&lt;/span&gt;
&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;            &lt;span class="c1"&gt;// Remove top (20)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔁 Iterating Through Stack
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Interview Example 1: Valid Parentheses
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;IsValid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sc"&gt;')'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sc"&gt;'('&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sc"&gt;']'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sc"&gt;'['&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sc"&gt;'}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sc"&gt;'{'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ContainsValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ContainsKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Interview Example 2: Evaluate Reverse Polish Notation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;EvalRPN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

    &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TryParse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"+"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"-"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📌 Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Syntax Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Declare&lt;/td&gt;
&lt;td&gt;&lt;code&gt;new Stack&amp;lt;T&amp;gt;()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stack.Push(value)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pop&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stack.Pop()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Peek&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stack.Peek()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Count&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stack.Count&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Iterate&lt;/td&gt;
&lt;td&gt;&lt;code&gt;foreach (var item in stack)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Up next: &lt;strong&gt;Queue and Deque&lt;/strong&gt; — perfect for BFS traversal and sliding window problems!&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>datastructures</category>
      <category>interview</category>
      <category>stack</category>
    </item>
    <item>
      <title>Mastering Dictionary&lt;TKey, TValue&gt; in C# for Coding Interviews</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Sun, 11 May 2025 14:11:34 +0000</pubDate>
      <link>https://dev.to/seonglinchua/mastering-dictionarytkey-tvalue-in-c-for-coding-interviews-559i</link>
      <guid>https://dev.to/seonglinchua/mastering-dictionarytkey-tvalue-in-c-for-coding-interviews-559i</guid>
      <description>&lt;h2&gt;
  
  
  🔑 Dictionary in C# — The Ultimate Tool for Fast Lookup
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;Dictionary&amp;lt;TKey, TValue&amp;gt;&lt;/code&gt; is a powerful data structure that maps &lt;strong&gt;unique keys to values&lt;/strong&gt;, allowing &lt;strong&gt;fast O(1) lookups&lt;/strong&gt; and &lt;strong&gt;efficient data grouping&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ When to Use Dictionary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Why Use Dictionary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Map key to value&lt;/td&gt;
&lt;td&gt;Quick access with known key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequency count&lt;/td&gt;
&lt;td&gt;Count how many times items appear&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grouping elements&lt;/td&gt;
&lt;td&gt;Categorize data using keys&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implement cache or memoization&lt;/td&gt;
&lt;td&gt;Fast storage and retrieval&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ✍️ Declaring and Initializing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Declare and initialize&lt;/span&gt;
&lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ageMap&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Adding entries&lt;/span&gt;
&lt;span class="n"&gt;ageMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"Alice"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;ageMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"Bob"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔧 Common Operations
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Add or update&lt;/span&gt;
&lt;span class="n"&gt;ageMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"Charlie"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;28&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Check key existence&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ageMap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ContainsKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Alice"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ageMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"Alice"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// Remove entry&lt;/span&gt;
&lt;span class="n"&gt;ageMap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bob"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Loop through dictionary&lt;/span&gt;
&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;kvp&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ageMap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kvp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;kvp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Interview Example 1: Two Sum
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="nf"&gt;TwoSum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;complement&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ContainsKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;complement&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;complement&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Interview Example 2: Group Anagrams
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;IList&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IList&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GroupAnagrams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;strs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;();&lt;/span&gt;

    &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;strs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;chars&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToCharArray&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ContainsKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

        &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IList&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📌 Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Syntax Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Declare&lt;/td&gt;
&lt;td&gt;&lt;code&gt;new Dictionary&amp;lt;TKey, TValue&amp;gt;()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add/Update&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dict[key] = value;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exists Check&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dict.ContainsKey(key)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dict.Remove(key)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Iterate&lt;/td&gt;
&lt;td&gt;&lt;code&gt;foreach (var kvp in dict)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Next up: &lt;strong&gt;Stack&lt;/strong&gt; — ideal for solving nested and reverse order problems like Valid Parentheses and backtracking tasks.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>datastructures</category>
      <category>interview</category>
      <category>dictionary</category>
    </item>
    <item>
      <title>Mastering List&lt;T&gt; in C# for Coding Interviews</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Sat, 10 May 2025 08:42:12 +0000</pubDate>
      <link>https://dev.to/seonglinchua/mastering-list-in-c-for-coding-interviews-25h8</link>
      <guid>https://dev.to/seonglinchua/mastering-list-in-c-for-coding-interviews-25h8</guid>
      <description>&lt;h2&gt;
  
  
  📘 List in C# — The Dynamic Array You Need to Know
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt; is the most flexible and commonly used collection in C#. It’s a &lt;strong&gt;dynamic array&lt;/strong&gt; that automatically resizes and provides &lt;strong&gt;indexed access&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ When to Use List
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Why Use List&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Need dynamic resizing&lt;/td&gt;
&lt;td&gt;Automatically expands as needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Index-based access&lt;/td&gt;
&lt;td&gt;Like arrays, but flexible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequent insert/remove&lt;/td&gt;
&lt;td&gt;Especially at the end&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storing objects or models&lt;/td&gt;
&lt;td&gt;Generic and powerful&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ✍️ Declaring &amp;amp; Initializing List
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create an empty list&lt;/span&gt;
&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Initialize with values&lt;/span&gt;
&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"Alice"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Bob"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Charlie"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔁 Adding, Removing, and Accessing Elements
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// Add to end&lt;/span&gt;
&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddRange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// Add multiple&lt;/span&gt;

&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// Remove by value&lt;/span&gt;
&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RemoveAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// Remove by index&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;         &lt;span class="c1"&gt;// Access&lt;/span&gt;
&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;               &lt;span class="c1"&gt;// Update&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔁 Iterating Through List
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔍 Searching and Sorting
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;exists&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bob"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IndexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Charlie"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// 2&lt;/span&gt;

&lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Sort&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;       &lt;span class="c1"&gt;// Sort alphabetically&lt;/span&gt;
&lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Reverse&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;    &lt;span class="c1"&gt;// Reverse order&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Interview Example: Merge Intervals (List of Lists)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[][]&lt;/span&gt; &lt;span class="nf"&gt;Merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[][]&lt;/span&gt; &lt;span class="n"&gt;intervals&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;intervals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;intervals&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;intervals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;CompareTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;merged&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;]&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;intervals&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;intervals&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
            &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;merged&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;merged&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;merged&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToArray&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📌 Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Syntax Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Declare&lt;/td&gt;
&lt;td&gt;&lt;code&gt;List&amp;lt;int&amp;gt; list = new List&amp;lt;int&amp;gt;();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list.Add(value)&lt;/code&gt;, &lt;code&gt;list.AddRange(...)&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access/Update&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list[i]&lt;/code&gt;, &lt;code&gt;list[i] = value&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list.Remove(value)&lt;/code&gt;, &lt;code&gt;list.RemoveAt(i)&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sort/Reverse&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list.Sort()&lt;/code&gt;, &lt;code&gt;list.Reverse()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Up next: &lt;strong&gt;Dictionary&lt;/strong&gt; — your go-to structure for frequency maps and lookup-based problems like Two Sum and Group Anagrams.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>datastructures</category>
      <category>interview</category>
      <category>list</category>
    </item>
    <item>
      <title>Mastering HashSet in C# for Coding Interviews</title>
      <dc:creator>seonglinchua</dc:creator>
      <pubDate>Sat, 10 May 2025 08:39:15 +0000</pubDate>
      <link>https://dev.to/seonglinchua/mastering-hashset-in-c-for-coding-interviews-15mp</link>
      <guid>https://dev.to/seonglinchua/mastering-hashset-in-c-for-coding-interviews-15mp</guid>
      <description>&lt;h2&gt;
  
  
  🧠 HashSet in C# — A Must-Know Tool for Uniqueness and Fast Lookups
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;HashSet&amp;lt;T&amp;gt;&lt;/code&gt; is one of the most versatile and commonly used data structures in coding interviews. It allows &lt;strong&gt;constant-time lookup&lt;/strong&gt; and guarantees &lt;strong&gt;unique elements only&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ When to Use HashSet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Why Use HashSet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Check for duplicates&lt;/td&gt;
&lt;td&gt;Fast &lt;code&gt;Contains()&lt;/code&gt; check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Track seen items&lt;/td&gt;
&lt;td&gt;O(1) add/lookup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unique collections&lt;/td&gt;
&lt;td&gt;Prevents duplicates automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set operations (union/intersect)&lt;/td&gt;
&lt;td&gt;Built-in set logic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ✍️ Declaring and Using HashSet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;seen&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HashSet&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="n"&gt;seen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;        &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="n"&gt;seen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;        &lt;span class="c1"&gt;// false (duplicate)&lt;/span&gt;

&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;exists&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;seen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="n"&gt;seen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// removes 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔁 Looping Through HashSet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;seen&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Interview Example 1: Detect Duplicates
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;ContainsDuplicate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HashSet&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Interview Example 2: Longest Substring Without Repeating Characters
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;LengthOfLongestSubstring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HashSet&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;maxLen&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
            &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;++;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="n"&gt;maxLen&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxLen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;maxLen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚙️ Set Operations
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HashSet&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HashSet&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IntersectWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// a = {2, 3}&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UnionWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// a = {1, 2, 3, 4}&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ExceptWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// a = {1}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📌 Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Syntax Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Declare&lt;/td&gt;
&lt;td&gt;&lt;code&gt;new HashSet&amp;lt;int&amp;gt;()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set.Add(value)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check Exists&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set.Contains(value)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove&lt;/td&gt;
&lt;td&gt;&lt;code&gt;set.Remove(value)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set Ops&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;UnionWith()&lt;/code&gt;, &lt;code&gt;IntersectWith()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Next up: &lt;strong&gt;Dictionary&lt;/strong&gt; — perfect for counting, mapping, and solving problems like Two Sum and Group Anagrams.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>datastructures</category>
      <category>interview</category>
      <category>hashset</category>
    </item>
  </channel>
</rss>
