Thep Excel

List.Bufferเก็บรายการในหน่วยความจำ

List.Buffer เก็บรายการข้อมูลไว้ในหน่วยความจำเพื่อเพิ่มประสิทธิภาพเมื่อต้องเข้าถึงรายการเดียวกันหลายครั้ง ฟังก์ชันนี้มีประโยชน์เมื่อต้องใช้ผลลัพธ์จากการคำนวณซ้ำๆ หรือเมื่อต้องการลดจำนวนการเข้าถึงแหล่งข้อมูลภายนอก

fx
=List.Buffer(list) as list

ความนิยม5/10
ความยาก4/10
ประโยชน์5/10

อัปเดต 3 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
list list รายการที่ต้องการเก็บในหน่วยความจำ

Additional Notes

List.Buffer เก็บรายการข้อมูลไว้ในหน่วยความจำแบบ eager evaluation (ประมวลผลทั้งหมดตั้งแต่ต้น) แทนที่จะใช้ lazy evaluation ที่ประมวลผลเมื่อต้องการ เมื่อต้องใช้รายการเดียวกันหลายครั้ง ฟังก์ชันนี้จะประหยัดเวลาคำนวณได้มาก เพราะไม่ต้องคำนวณซ้ำ

ที่เจ๋งคือ List.Buffer คือเครื่องมือ trade-off ระหว่างหน่วยความจำและความเร็ว ใช้หน่วยความจำมากขึ้น แต่ลดการคำนวณซ้ำ ซึ่งมีประโยชน์โดยเฉพาะเมื่อรายการที่อ้างอิงจากแหล่งข้อมูลภายนอก (ไฟล์, API, ฐานข้อมูล) และต้องใช้หลายครั้ง

ส่วนตัวผม ผมมักใช้ List.Buffer กับ List.Select หรือ List.Transform ที่ซ้ำหลายครั้ง โดยเฉพาะเมื่อข้อมูลมาจากแหล่งที่ช้า ประหยัดกว่าเรียกแหล่งข้อมูลหลายรอบ 😎

How it works

เพิ่มประสิทธิภาพการใช้รายการซ้ำ

เมื่อต้องใช้รายการเดียวกันหลายครั้ง ให้เก็บไว้ในหน่วยความจำ

ลดจำนวนการเข้าถึงแหล่งข้อมูล

แทนที่จะเข้าถึงแหล่งข้อมูลภายนอกซ้ำๆ ให้เก็บผลลัพธ์ในหน่วยความจำ

ใช้ผลลัพธ์ในการคำนวณต่างๆ

เก็บผลลัพธ์ของรายการเพื่อใช้ในการคำนวณหรือการกรองข้อมูลต่างๆ

Examples

ตัวอย่างที่ 1: Buffer รายการตัวเลขList.Buffer({1, 2, 3, 4, 5})

สูตรนี้เก็บรายการตัวเลข {1, 2, 3, 4, 5} ไว้ในหน่วยความจำ เพื่อให้การเข้าถึงข้อมูลเร็วขึ้น

fx
=List.Buffer({1, 2, 3, 4, 5})

ผลลัพธ์{1, 2, 3, 4, 5}
ตัวอย่างที่ 2: Buffer รายการจากการตัดกรองlet Filtered = List.Select({1..1000}, each _ > 500), Buffered = List.Buffer(Filtered) in Buffered

ผมใช้ let…in เพื่อชัดเจน กรองข้อมูล 1-1000 เหลือแค่ที่มากกว่า 500 แล้วเก็บในหน่วยความจำเพื่อใช้ซ้ำ ประหยัดการกรองซ้ำ

fx
let Filtered = List.Select({1..1000}, each _ > 500), Buffered = List.Buffer(Filtered) in Buffered

ผลลัพธ์รายการ {501, 502, …, 1000}
ตัวอย่างที่ 3: Buffer รายการข้อความlet Source = {"apple", "banana", "cherry"}, Buffered = List.Buffer(Source) in Buffered

สูตรนี้สร้างรายการข้อความและเก็บไว้ในหน่วยความจำเพื่อใช้ซ้ำในการคำนวณต่างๆ

fx
let Source = {"apple", "banana", "cherry"}, Buffered = List.Buffer(Source) in Buffered

ผลลัพธ์{"apple", "banana", "cherry"}

FAQs

เมื่อไหร่ควรใช้ List.Buffer+

ผมแนะนำให้ใช้เมื่อ: 1) ต้องใช้รายการเดียวกันหลายครั้ง 2) แหล่งข้อมูลมาจากภายนอก (ช้า) 3) ต้องการประหยัด CPU มากกว่า หน่วยความจำ สำหรับรายการเล็กๆ จากหน่วยความจำแล้ว อาจไม่มีประโยชน์

ความแตกต่างระหว่าง List.Buffer กับ Table.Buffer+

ผมได้ใช้ทั้งคู่บ่อย List.Buffer ใช้กับรายการ (List) ส่วน Table.Buffer ใช้กับตาราง (Table) หลักการเดียวกัน คือประมวลผลทั้งหมดแล้วเก็บในหน่วยความจำ

List.Buffer ใช้หน่วยความจำเท่าไหร่+

ส่วนตัวผม มันขึ้นอยู่กับขนาดของรายการและชนิดข้อมูล รายการหนึ่งล้านแถว มี 10 คอลัมน์ อาจใช้หลาย MB สำหรับรายการตัวเลขง่ายๆ ใช้น้อยมาก ลองใช้เมื่อต้องประสิทธิภาพจริง

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ List.Buffer จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้List.BufferList functions
List functions (2)
List.Select

List.Select จะรับ List และฟังก์ชันเงื่อนไข (selection as function) โดยจะประเมินฟังก์ชันเงื่อนไขกับสมาชิกแต่ละตัว หากฟังก์ชันคืนค่า true จะเก็บสมาชิกนั้นไว้ใน List ใหม่ หากคืนค่า false จะถูกคัดทิ้งไป

List.Transform

List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม

Table functions (2)
Table.Buffer

โหลดตารางเข้าสู่หน่วยความจำ (RAM) เพื่อแยกข้อมูลจากแหล่งเดิมและป้องกันไม่ให้ Query Folding ดึงข้อมูลใหม่

Table.Buffer

Table.Buffer บังคับโหลดตารางลงหน่วยความจำและแยกออกจากแหล่งข้อมูลต้นทาง ช่วยป้องกันการ fold และควบคุมเวลาประมวลผล

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่