Tag Archives | array

Array หรือ Collection

ไม่รู้มีใครเคยคิดหรือป่าว แต่คำถามนี้เหมือนมันอยู่ในหัวตั้งแต่เริ่มทำงานเลยหละ (หรืออาจจะตั้งแต่รู้จัก Collection API ของจาวาเลยมั้ง) หลายคนอาจจะใช้ Collection แทน Array ไปเลยเพราะมันสะดวกดี สามารถเพิ่มลดได้ง่าย (โดยบางครั้งอาจจะไม่รู้ว่า Collection แต่ละแบบมีลักษณะอย่างไร แต่นั่นไว้เป็นอีกหัวข้อนึงละกัน) และก็สามารถใช้แทน Array ได้แทบทั้งหมด หลายคนอาจจะสงสัยว่า อ้าวแล้วอย่างนี้จะกลับไปใช้ Array ทำไม จริงๆ Array มันก็มีคุณสมบัติของมันที่ทำให้ชอบหลายๆ อย่างนะ เช่น ประกาศได้ง่าย สามารถกำหนดค่าเริ่มต้นให้มันได้ โดยไม่ต้องคอยไล่เพิ่มทีละตัว และก็มีขอบเขตที่แน่นอน ไม่สามารถเพิ่มได้! และข้อดีอย่างสุดท้ายนี่แหละ ที่เวลาเขียนโปรแกรมแล้วเอามาตัดสินว่าเมื่อไหร่จะใช้ Array หรือ Collection เวลาเลือกก็ดูจากเมธอดที่เขียนว่าจำเป็นต้องคืนค่าให้เปลี่ยนแปลงชุดข้อมูลนั้นได้หรือป่าว ถ้าคืนค่าไปแล้ว ข้อมูลจะถูกเอาไปเพิ่มหรือลดอีกภายหลังก็จะให้กลับไปเป็น Collection แต่ถ้าไม่ต้องก็ออกไปเป็น Array ซะ เหมือนกันตอนเอาเข้า ถ้าเมธอดนั้น มีไว้เพื่อเพิ่มหรือลดข้อมูล ก็รับมาเป็น Collection ซะ แต่ถ้าไม่จำเป็นก็ขอมาเป็น Array ดีกว่า แต่วิธีตัดสินนี้ไม่สามารถเอาไปใช้กับภาษาอย่าง [...]

Read full story Comments { 0 }

List กับ ArrayCollection

ช่วงนี้กำลังแก้ Checkbox อย่างจริงๆจังๆ แล้วก็เจอปัญหาตามมามากมาย เริ่มจาก Checkbox ไม่เปลี่ยนหลังจากเลือกไปแล้วเพราะว่า method updateDisplayList ของ renderer ยังไม่ถูกเรียกเมื่อเราคลิกที่ List วิธีที่จะทำให้มันเรียกก็ต้องเซท array กลับไปอีกที แต่ปัญหาใหญ่ที่สุดที่เจอแล้วก็นั่งแก้กับ @iporsut อยู่ซะนานเลยคือเรื่อง List กับ ArrayCollection เรื่องเกิดขึ้นเมื่อตัวข้อมูลที่ใช้อยู่มันดันใช้ข้ามประเภทของ ListBase คือ List กับ DataGrid แล้วทีนี้ DataGrid มันสามารถสั่งเรียงข้อมูลได้โดยกดที่หัวแถว สิ่งที่มันทำคือสร้างวัตถุ Sort แล้วยัดเข้าไปที่ ArrayCollection แล้วสั่ง refresh ซะซึ่งข้อมูลที่ออกมาทั้ง List และ DataGrid ก็ดูเรียงสวยงามดี แต่ว่า List ผมกับ method click ที่ใช้สำหรับแสดง Checkbox ด้วยจะใช้ไม่ได้อีกเลย ตอนแรกก็งงว่าทำไม ลองไล่ดูแล้วก็พบว่า array ที่ผมใช้รับ item [...]

Read full story Comments { 3 }

concat กับ push

หลังจากหาวิธีแก้มานานว่าทำยังไงดีที่จะเพิ่มข้อมูลใส่ Array ให้เร็วขึ้นเพราะว่า ถ้าใช้ฟังก์ชั่นมาตรฐานทั่วไปในการต่อ Array สองอันเข้าด้วยกันชื่อฟังก์ชั่นที่นึกถึงอย่างแรกเลยก็คือ concat แต่ว่าปัญหาเกิดขึ้นเมื่อ Array ที่ใช้มันใหญ่ขึ้น เวลาที่ใช้ในการ concat ก็จะช้าลงๆ แบบรับไม่ได้เลยหละ ซึ่งก็ยังไม่ได้แงะลงไปว่า concat มันทำอะไร แต่ตอนนี้เจอฟังก์ชั่นใหม่ที่ใช้แทนกันได้แล้วนั่นคือ push นั่นเอง ข้อแตกต่างระหว่างสองอันนี้คือ concat จะเชื่อม Array เข้าด้วยกัน แต่ push เป็นแค่การเพิ่มข้อมูลไปท้าย Array ดังนั้นหากใช้ push ต้องไล่ข้อมูลใน Array ที่จะเอามาเชื่อมทีละตัวเอาออกมาแล้วค่อยยัดเข้ามาใหม่ ดูแล้วมันก็น่าจะทำเหมือนกันแต่ปรากฏว่าไล่วนเอง เร็วกว่ากันเยอะเลย – -” public function generatePush(event:MouseEvent):void { var average:Number = 0 var total:int = 10000 var na:Array = new Array() [...]

Read full story Comments { 1 }

Flex array

เจอเรื่องประหลาดๆ เกี่ยวกับ array ของ flex เข้าเพราะว่าข้อมูลที่จะยัดใส่ array ดันมีเยอะ และค่อยๆ เพิ่มอีกต่างหาก เลยเกิดปัญหาเข้าเพราะพอข้อมูลเพิ่มเยอะขึ้นเรื่อยๆ การใส่ข้อมูลลง array ของ flex จะช้าลงเรื่อยๆ โดยไม่รู้สาเหต ลองไปขุดๆ ดูก็รู้มาว่า array ของ flex เป็นแบบ associative array เหมือน php หรือ javascript แต่ก็ไม่น่าจะเกี่ยวเท่าไหร่ หรือป่าว เพราะ hash map เวลาใส่ข้อมูลลงไปเยอะๆ ก็ไม่น่าจะช้า ขนาดที่ว่า สามวินาที ถึงจะใส่ข้อมูลลงไปได้ พี่ที่ทำงานตอนนี้ก็เลยเลี่ยงไปพึ่งฝั่ง server ให้เอาข้อมูลยัดใส่ array ให้เรียบร้อยแล้วส่งมา เห้อ ทำไม flex มันทำอะไรกับ array หว่าถึงได้ช้าขนาดนี้นะ

Read full story Comments { 0 }