จริงๆเรียกว่าลองมาทวนๆ JavaScript แล้วมีงงๆกับ Array Spread นิดหน่อย เลยลองดูจาก Doc จาก Spread syntax (...) - JavaScript | MDN (mozilla.org) สรุปแตก Element ข้างในออกมาให้ตัวย่อยสุด
- Array String แตกออกมาเป็น String
- Array int แตกออกมาเป็น int
- Array ผสมกัน แตกออกมาเป็น แต่ละตัวตาม Type
ตัวอย่างของ Javascript ก็ตาม ด้านล่างนี้เลย
//String const testStrArr = "Hello World" console.log(...testStrArr); //int const testNumberArr = [1, 2, 3]; console.log(...testNumberArr); //Mix const testMixArr = [1, "two", 3]; console.log(...testMixArr);
ดูมีประโยชน์ดี แล้ว C# มันมีไหม คำตอบเพิ่งมีตอนปีที่แล้วใน C#12 ครับ Pattern คล้ายกับของ JS เลย ใช้ตัว
.. variable_name
ตัวอย่างตามนี้เลย
using System; public class Program { public static void Main() { int[] row0 = [1, 2, 3]; int[] row1 = [4, 5, 6]; int[] row2 = [7, 8, 9]; int[] single = [.. row0, .. row1, .. row2, 15, 20]; foreach (var element in single) { Console.Write($"{element}, "); } } }
var numbers = new double[] {1.5, 2.0, 3.0}; // Double usually doesn't have precision issues with small whole numbers Console.WriteLine(Sum(numbers));
แล้วถ้ามาลองตัวอย่างที่ตัวอย่างใน Spread syntax (...) - JavaScript | MDN (mozilla.org)
- JavaScript
console.log("=========================================="); function sum(x, y, z) { return x + y + z; } console.log(sum(...testNumberArr)); // Expected output: 6 console.log(sum.apply(null, testNumberArr)); // Expected output: 6
- C# ตอนนี้ยังทำไม่ได้นะ มันจะขึ้น Error แทน ดังรูปเลย
สรุป Spread Operator ของ C# ยังไม่เท่ากับของตัว JavaScript นะ
- JavaScript - แตก Element ออกมา
- C# แยก Index ออกมา
Bonus
แล้วถ้าก่อนหน้า C#12 ทำยังไง กำหนด Data Type ให้รับ Array ครับ แล้วให้ Trick .Sum เอา
public int Sum(params int[] values) { return values.Sum(); } var numbers = new int[] {1,2,3}; Console.WriteLine(Sum(numbers));
Reference
- Spread syntax (...) - JavaScript | MDN (mozilla.org)
- What's new in C# 12 - C# Guide - C# : spread operator | Microsoft Learn
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.