คำถามติดแท็ก iterator

iterator เป็นรูปแบบการเขียนโปรแกรมเชิงวัตถุที่ช่วยให้การแวะผ่านคอลเลกชันไม่เชื่อเรื่องการใช้งานจริงหรือวัตถุที่อยู่ในหน่วยความจำกายภาพ มันเป็นหนึ่งในรูปแบบการออกแบบเชิงพฤติกรรมของ Gang of Four



6
สร้าง Iterators ของฉันเอง
ฉันพยายามเรียนรู้ C ++ ดังนั้นให้อภัยฉันถ้าคำถามนี้แสดงให้เห็นถึงการขาดความรู้พื้นฐานคุณเห็นไหมความจริงก็คือฉันไม่มีความรู้พื้นฐาน ฉันต้องการความช่วยเหลือในการหาวิธีสร้างตัววนซ้ำสำหรับชั้นเรียนที่ฉันสร้างขึ้น ฉันมีคลาส 'รูปร่าง' ซึ่งมีที่เก็บคะแนน ฉันมีคลาส 'ชิ้นส่วน' ซึ่งอ้างอิงรูปร่างและกำหนดตำแหน่งสำหรับรูปร่าง ชิ้นส่วนไม่มีรูปร่างมันเพียงแค่อ้างอิงรูปร่าง ฉันต้องการให้ดูเหมือนว่า Piece เป็นคอนเทนเนอร์ของคะแนนซึ่งเหมือนกับของ Shape ที่อ้างอิง แต่ด้วยออฟเซ็ตของตำแหน่งของ Piece ที่เพิ่มเข้ามา ฉันต้องการที่จะสามารถย้ำผ่านคะแนนของชิ้นเหมือนว่าชิ้นเป็นภาชนะเอง ฉันอ่านหนังสือไปรอบ ๆ แล้วไม่พบอะไรที่ช่วยฉันได้ ฉันจะขอบคุณมากสำหรับพอยน์เตอร์ใด ๆ
141 c++  iterator 

5
ทำซ้ำคีย์อ็อบเจ็กต์ใน node.js
ตั้งแต่ Javascript 1.7 มีวัตถุIteratorซึ่งอนุญาตสิ่งนี้: var a={a:1,b:2,c:3}; var it=Iterator(a); function iterate(){ try { console.log(it.next()); setTimeout(iterate,1000); }catch (err if err instanceof StopIteration) { console.log("End of record.\n"); } catch (err) { console.log("Unknown error: " + err.description + "\n"); } } iterate(); มีอะไรแบบนี้ใน node.js? ตอนนี้ฉันกำลังใช้: function Iterator(o){ /*var k=[]; for(var i in o){ k.push(i); …

3
ความแตกต่างระหว่าง Iterator และ Listiterator?
Iterator ite = Set.iterator(); Iterator ite = List.iterator(); ListIterator listite = List.listIterator(); เราสามารถใช้IteratorการสำรวจSetหรือหรือList Mapแต่ListIteratorสามารถนำมาใช้เพื่อทำงานภายในก็ไม่สามารถเดินทางข้ามList Setทำไม? ฉันรู้ว่าความแตกต่างที่สำคัญคือด้วยตัววนซ้ำเราสามารถเดินทางในทิศทางเดียวเท่านั้น แต่ด้วยการที่ListIteratorเราสามารถเดินทางได้ทั้งสองทิศทาง มีความแตกต่างอื่น ๆ อีกไหม? และข้อได้เปรียบใด ๆListIteratorมากกว่าIterator?

12
การทำซ้ำบนแผนที่ typescript
ฉันกำลังพยายามทำซ้ำบนแผนที่ typescript แต่ฉันได้รับข้อผิดพลาดอยู่เรื่อย ๆ และยังไม่พบวิธีแก้ปัญหาใด ๆ สำหรับปัญหาเล็กน้อยดังกล่าว รหัสของฉันคือ: myMap : Map<string, boolean>; for(let key of myMap.keys()) { console.log(key); } และฉันได้รับข้อผิดพลาด: พิมพ์ 'IterableIteratorShim <[string, boolean]>' ไม่ใช่ประเภทอาร์เรย์หรือประเภทสตริง การติดตามกองเต็ม: Error: Typescript found the following errors: /home/project/tmp/broccoli_type_script_compiler-input_base_path-q4GtzHgb.tmp/0/src/app/project/project-data.service.ts (21, 20): Type 'IterableIteratorShim<[string, boolean]>' is not an array type or a string type. at BroccoliTypeScriptCompiler._doIncrementalBuild (/home/project/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:115:19) …

3
จะเกิดอะไรขึ้นถ้าคุณเรียกลบ () บนองค์ประกอบแผนที่ในขณะที่ทำซ้ำตั้งแต่ต้นจนจบ
ในรหัสต่อไปนี้ฉันวนลูปผ่านแผนที่และทดสอบว่าจำเป็นต้องลบองค์ประกอบหรือไม่ ปลอดภัยหรือไม่ที่จะลบองค์ประกอบและทำซ้ำต่อไปหรือฉันต้องรวบรวมคีย์ในคอนเทนเนอร์อื่นและทำลูปที่สองเพื่อเรียกการลบ () map<string, SerialdMsg::SerialFunction_t>::iterator pm_it; for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++) { if (pm_it->second == delete_this_id) { port_map.erase(pm_it->first); } } UPDATE: แน่นอนจากนั้นฉันก็อ่านคำถามนี้ซึ่งฉันไม่คิดว่าจะเกี่ยวข้อง แต่ตอบคำถามของฉัน
134 c++  stl  iterator 


7
'Ruby way' คืออะไรในการวนซ้ำสองอาร์เรย์พร้อมกัน
ความอยากรู้อยากเห็นทางไวยากรณ์มากกว่าปัญหาในการแก้ ... ฉันมีอาร์เรย์สองอาร์เรย์ที่มีความยาวเท่ากันและต้องการทำซ้ำทั้งสองอาร์เรย์พร้อมกันตัวอย่างเช่นเพื่อส่งออกทั้งสองค่าที่ดัชนีหนึ่ง @budget = [ 100, 150, 25, 105 ] @actual = [ 120, 100, 50, 100 ] ฉันรู้ว่าฉันสามารถใช้each_indexและทำดัชนีในอาร์เรย์ได้ดังนี้: @budget.each_index do |i| puts @budget[i] puts @actual[i] end มีวิธีที่ทับทิมจะทำเช่นนี้ดีขึ้นหรือไม่ อะไรทำนองนี้? # Obviously doesn't achieve what I want it to - but is there something like this? [@budget, @actual].each do |budget, …
127 ruby  arrays  iterator 

5
เหตุใดการวนซ้ำรายการจึงเร็วกว่าการจัดทำดัชนีผ่านรายการ
การอ่านเอกสาร Java สำหรับรายการ ADTระบุว่า: อินเทอร์เฟซรายการมีสี่วิธีสำหรับการเข้าถึงตำแหน่ง (ดัชนี) เพื่อเข้าถึงองค์ประกอบรายการ รายการ (เช่นอาร์เรย์ Java) เป็นศูนย์ โปรดสังเกตว่าการดำเนินการเหล่านี้อาจดำเนินการตามเวลาตามสัดส่วนกับค่าดัชนีสำหรับการนำไปใช้งานบางอย่าง (เช่นคลาส LinkedList) ดังนั้นการวนซ้ำองค์ประกอบในรายการมักจะดีกว่าในการสร้างดัชนีผ่านมันหากผู้โทรไม่ทราบการนำไปใช้ นี่หมายความว่าอย่างไร? ฉันไม่เข้าใจข้อสรุปที่วาดขึ้น
125 java  list  iterator 

10
ความแตกต่างระหว่าง Java Enumeration และ Iterator
อะไรคือความแตกต่างที่แน่นอนระหว่างสองอินเทอร์เฟซนี้? ไม่Enumerationมีประโยชน์มากกว่าการใช้Iterator? หากใครสามารถอธิบายได้อย่างละเอียดบทความอ้างอิงจะได้รับการชื่นชม

6
วนซ้ำบนบรรทัดของสตริง
ฉันมีสตริงหลายบรรทัดที่กำหนดไว้ดังนี้: foo = """ this is a multi-line string. """ สตริงนี้เราใช้เป็นอินพุตทดสอบสำหรับตัวแยกวิเคราะห์ที่ฉันกำลังเขียน parser-function รับ a file-object เป็นอินพุตและวนซ้ำทับมัน นอกจากนี้ยังเรียกnext()วิธีการนี้โดยตรงเพื่อข้ามบรรทัดดังนั้นฉันจึงต้องการตัววนซ้ำเป็นอินพุตไม่ใช่ทำซ้ำได้ ฉันต้องการตัววนซ้ำที่วนซ้ำในแต่ละบรรทัดของสตริงนั้นเช่น - fileวัตถุจะอยู่เหนือบรรทัดของไฟล์ข้อความ แน่นอนฉันสามารถทำได้เช่นนี้: lineiterator = iter(foo.splitlines()) มีวิธีที่ตรงกว่านี้หรือไม่? ในสถานการณ์สมมตินี้สตริงจะต้องข้ามผ่านหนึ่งครั้งสำหรับการแยกและจากนั้นอีกครั้งโดยตัวแยกวิเคราะห์ มันไม่สำคัญในกรณีทดสอบของฉันเนื่องจากสตริงนั้นสั้นมากฉันแค่ถามด้วยความอยากรู้ Python มีบิวท์อินที่มีประโยชน์และมีประสิทธิภาพมากมายสำหรับสิ่งเหล่านี้ แต่ฉันไม่พบสิ่งใดที่เหมาะสมกับความต้องการนี้
119 python  string  iterator 

7
มีนิพจน์สำหรับเครื่องกำเนิดไฟฟ้าที่ไม่สิ้นสุดหรือไม่?
มีนิพจน์เครื่องกำเนิดไฟฟ้าแบบตรงไปตรงมาที่สามารถให้องค์ประกอบที่ไม่มีที่สิ้นสุดหรือไม่? นี่เป็นคำถามเชิงทฤษฎีล้วนๆ ไม่จำเป็นต้องมีคำตอบที่ "ใช้ได้จริง" ที่นี่ :) ตัวอย่างเช่นการสร้างเครื่องกำเนิดไฟฟ้าที่ จำกัด เป็นเรื่องง่าย: my_gen = (0 for i in xrange(42)) อย่างไรก็ตามในการสร้างสิ่งที่ไม่มีที่สิ้นสุดฉันต้อง "สร้างมลพิษ" เนมสเปซของฉันด้วยฟังก์ชันปลอม: def _my_gen(): while True: yield 0 my_gen = _my_gen() การทำสิ่งต่างๆในไฟล์แยกกันและการทำในimportภายหลังจะไม่นับรวม ฉันยังรู้ว่าitertools.repeatมันทำอย่างนี้ ฉันอยากรู้ว่ามีวิธีแก้ปัญหาแบบซับเดียวหรือไม่

7
Scala ลงหรือลดลงสำหรับลูป?
ใน Scala คุณมักใช้ตัววนซ้ำเพื่อทำforวนซ้ำตามลำดับที่เพิ่มขึ้นเช่น: for(i <- 1 to 10){ code } คุณจะทำอย่างไรให้มันเปลี่ยนจาก 10 เป็น 1 ฉันเดาว่า10 to 1ให้ตัววนซ้ำว่าง (เหมือนคณิตศาสตร์พิสัยปกติ)? ฉันสร้างสคริปต์ Scala ซึ่งแก้ไขได้โดยการเรียก reverse บน iterator แต่มันไม่ดีในความคิดของฉันวิธีต่อไปนี้จะไปหรือไม่? def nBeers(n:Int) = n match { case 0 => ("No more bottles of beer on the wall, no more bottles of beer." + "\nGo to …

9
อะไรคือวิธีที่ดีที่สุดในการทำซ้ำสองคอนเทนเนอร์ขึ้นไปพร้อมกัน
C ++ 11 มีหลายวิธีในการวนซ้ำบนคอนเทนเนอร์ ตัวอย่างเช่น: ลูปตามช่วง for(auto c : container) fun(c) มาตรฐาน :: for_each for_each(container.begin(),container.end(),fun) อย่างไรก็ตามวิธีที่แนะนำในการทำซ้ำสองคอนเทนเนอร์ (หรือมากกว่า) ที่มีขนาดเท่ากันเพื่อทำสิ่งต่างๆเช่น: for(unsigned i = 0; i < containerA.size(); ++i) { containerA[i] = containerB[i]; }

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.