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

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

8
การใช้ map () บนตัววนซ้ำ
สมมติว่าเรามีแผนที่: let m = new Map();โดยใช้m.values()คืนค่าตัววนซ้ำแผนที่ แต่ฉันไม่สามารถใช้forEach()หรือmap()บน iterator ที่และการดำเนินการในขณะที่ห่วงว่า iterator ดูเหมือนว่าต่อต้านรูปแบบฟังก์ชั่นตั้งแต่ ES6 map()เสนอเช่น มีวิธีใช้map()กับ iterator หรือไม่?


4
ระบุ () - สร้างเครื่องกำเนิดไฟฟ้าใน Python
ฉันต้องการทราบว่าจะเกิดอะไรขึ้นเมื่อฉันส่งผลลัพธ์ของฟังก์ชันเครื่องกำเนิดไฟฟ้าไปยัง python's enumerate () ตัวอย่าง: def veryBigHello(): i = 0 while i < 10000000: i += 1 yield "hello" numbered = enumerate(veryBigHello()) for i, word in numbered: print i, word การแจงนับวนซ้ำอย่างเฉื่อยชาหรือไม่ก็ทำให้ทุกอย่างกลายเป็นเรื่องแรก? ฉัน 99.999% แน่ใจว่ามันขี้เกียจดังนั้นฉันจะปฏิบัติเหมือนกับฟังก์ชั่นเครื่องกำเนิดไฟฟ้าได้หรือไม่หรือฉันต้องระวังอะไร


5
เป็นไปได้ไหมที่จะเริ่มทำซ้ำจากองค์ประกอบอื่นที่ไม่ใช่องค์ประกอบแรกโดยใช้ foreach
ฉันกำลังคิดที่จะใช้ IEnumerable สำหรับคอลเลกชันที่กำหนดเองของฉัน (ต้นไม้) ดังนั้นฉันจึงสามารถใช้ foreach เพื่อสำรวจต้นไม้ของฉันได้ อย่างไรก็ตามเท่าที่ฉันรู้ foreach มักจะเริ่มจากองค์ประกอบแรกของคอลเลกชัน ฉันต้องการเลือกจากองค์ประกอบที่ foreach เริ่มต้น เป็นไปได้ไหมที่จะเปลี่ยนองค์ประกอบที่ foreach เริ่มต้น?

3
JavaScript - ความแตกต่างของ myArray.forEach vs for loop
ฉันเห็นคำถามมากมายที่แนะนำให้ใช้: for (var i = 0; i < myArray.length; i++){ /* ... */ } แทน: for (var i in myArray){ /* ... */ } สำหรับอาร์เรย์เนื่องจากการวนซ้ำไม่สอดคล้องกัน ( ดูที่นี่ ) อย่างไรก็ตามฉันไม่พบสิ่งที่ดูเหมือนจะชอบลูปเชิงวัตถุ: myArray.forEach(function(item, index){ /* ... */ }); ซึ่งดูเหมือนง่ายกว่าสำหรับฉัน สำหรับโครงการปัจจุบันของฉันความเข้ากันได้ของ IE8 เป็นสิ่งสำคัญและฉันกำลังพิจารณาใช้polyfill ของ Mozillaแต่ฉันไม่แน่ใจ 100% ว่าจะได้ผลอย่างไร มีความแตกต่างระหว่างมาตรฐานสำหรับลูป (ตัวอย่างแรกด้านบน) และการใช้งาน Array.prototype.forEach โดยเบราว์เซอร์สมัยใหม่หรือไม่ มีความแตกต่างระหว่างการใช้งานเบราว์เซอร์สมัยใหม่และการใช้งานของ Mozilla …

7
เหตุใด Objects จึงไม่สามารถทำซ้ำได้ใน JavaScript
เหตุใดวัตถุจึงไม่สามารถทำซ้ำได้ตามค่าเริ่มต้น ฉันเห็นคำถามตลอดเวลาที่เกี่ยวข้องกับการวนซ้ำออบเจ็กต์วิธีแก้ปัญหาทั่วไปคือการวนซ้ำคุณสมบัติของอ็อบเจ็กต์และเข้าถึงค่าภายในอ็อบเจ็กต์ด้วยวิธีนั้น สิ่งนี้ดูธรรมดามากจนทำให้ฉันสงสัยว่าทำไมวัตถุต่างๆถึงไม่สามารถทำซ้ำได้ คำสั่งเช่น ES6 for...ofน่าใช้สำหรับวัตถุโดยค่าเริ่มต้น เนื่องจากคุณลักษณะเหล่านี้มีให้เฉพาะสำหรับ "อ็อบเจ็กต์ที่ทำซ้ำได้" แบบพิเศษซึ่งไม่รวมอ{}อบเจ็กต์เราจึงต้องผ่านห่วงเพื่อให้สามารถใช้งานกับวัตถุที่เราต้องการใช้ คำสั่ง for ... of สร้าง loop วนซ้ำบนวัตถุที่ทำซ้ำได้ (รวมถึง Array, Map, Set, วัตถุอาร์กิวเมนต์และอื่น ๆ ) ... ตัวอย่างเช่นการใช้ฟังก์ชันเครื่องกำเนิด ES6 : var example = {a: {e: 'one', f: 'two'}, b: {g: 'three'}, c: {h: 'four', i: 'five'}}; function* entries(obj) { for (let key of …

13
อัลกอริทึม "ออนไลน์" (ตัววนซ้ำ) สำหรับการประมาณค่ามัธยฐานทางสถิติโหมดความเบ้ความเคอร์โทซิส?
มีอัลกอริทึมในการประมาณค่ามัธยฐานโหมดความเบ้และ / หรือ kurtosis ของชุดค่า แต่ไม่จำเป็นต้องจัดเก็บค่าทั้งหมดในหน่วยความจำในครั้งเดียว? ฉันต้องการคำนวณสถิติพื้นฐาน: ค่าเฉลี่ย: ค่าเฉลี่ยเลขคณิต ความแปรปรวน: ค่าเฉลี่ยของการเบี่ยงเบนกำลังสองจากค่าเฉลี่ย ค่าเบี่ยงเบนมาตรฐาน: รากที่สองของความแปรปรวน มัธยฐาน: ค่าที่แยกตัวเลขครึ่งหนึ่งที่ใหญ่กว่าออกจากครึ่งที่เล็กกว่า โหมด: ค่าที่พบบ่อยที่สุดในชุด ความเบ้: tl; ดร เคอร์โทซิส: tl; ดร สูตรพื้นฐานสำหรับการคำนวณสิ่งเหล่านี้คือเลขคณิตระดับประถมศึกษาและฉันก็รู้ดี มีไลบรารีสถิติมากมายที่ใช้งานได้เช่นกัน ปัญหาของฉันคือค่าจำนวนมาก (หลายพันล้าน) ในชุดที่ฉันจัดการ: การทำงานใน Python ฉันไม่สามารถสร้างรายการหรือแฮชด้วยองค์ประกอบหลายพันล้านรายการได้ แม้ว่าฉันจะเขียนสิ่งนี้ใน C แต่อาร์เรย์พันล้านองค์ประกอบก็ไม่สามารถใช้งานได้จริง ข้อมูลไม่ถูกจัดเรียง มันผลิตขึ้นแบบสุ่มทันทีโดยกระบวนการอื่น ๆ ขนาดของแต่ละชุดมีความผันแปรสูงและจะไม่ทราบขนาดล่วงหน้า ฉันได้หาวิธีจัดการค่าเฉลี่ยและความแปรปรวนได้ค่อนข้างดีแล้วโดยจะวนซ้ำตามแต่ละค่าในเซตตามลำดับใด ๆ (จริงๆแล้วในกรณีของฉันฉันจะเรียงลำดับตามลำดับที่สร้างขึ้น) นี่คืออัลกอริทึมที่ฉันใช้http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm : เริ่มต้นตัวแปรสามตัว: count, sum และ sum_of_squares สำหรับแต่ละค่า: จำนวนที่เพิ่มขึ้น …

5
วนซ้ำอักขระแต่ละตัวของสตริงในทับทิม 1.8.6 (each_char)
ฉันยังใหม่กับทับทิมและกำลังพยายามใช้งานตัวละครแต่ละตัวแยกจากสตริงพื้นฐานในทับทิม ฉันใช้ทับทิม 1.8.6 และต้องการทำสิ่งที่ชอบ: "ABCDEFG".each_char do |i| puts i end สิ่งนี้ก่อให้เกิดข้อผิดพลาดวิธีการที่ไม่ได้กำหนด `` each_char ' ฉันคาดหวังว่าจะเห็นผลลัพธ์แนวตั้งของ: A B C D ..etc เป็นeach_charวิธีการที่กำหนดไว้เพียง 1.9? ฉันลองใช้eachวิธีธรรมดาแต่บล็อกเพียงแค่ดึงสตริงทั้งหมดในบรรทัดเดียว วิธีเดียวที่ฉันคิดว่าจะทำอย่างไรซึ่งค่อนข้างไม่สะดวกคือการสร้างอาร์เรย์ของอักขระตั้งแต่ต้น: ['A','B','C','D','...'].each do|i| puts i end สิ่งนี้ได้ผลลัพธ์ที่ต้องการ: A B C ..etc อาจมีวิธีที่จะทำให้ได้ผลลัพธ์นี้โดยใช้สตริงที่ไม่ได้แก้ไขเพื่อเริ่มต้นด้วยหรือไม่? ฉันคิดว่า Java ที่เทียบเท่าคือ: for (int i = 0; i < aString.length(); i++){ char currentChar = …
86 ruby  string  iterator 

6
ต้องการตัววนซ้ำเมื่อใช้ ranged-based สำหรับลูป
ขณะนี้ฉันสามารถทำลูปตามระยะห่างได้เท่านั้น: for (auto& value : values) แต่บางครั้งฉันต้องการตัววนซ้ำค่าแทนการอ้างอิง (ไม่ว่าด้วยเหตุผลใดก็ตาม) มีวิธีใดบ้างที่ไม่ต้องผ่านเวกเตอร์เปรียบเทียบค่าทั้งหมด?
85 c++  c++11  for-loop  iterator 

2
ใน JavaScript ES6 ความแตกต่างระหว่างตัววนซ้ำกับตัววนซ้ำคืออะไร
iterable เหมือนกับ iterator หรือแตกต่างกันหรือไม่? ดูเหมือนว่าจากข้อมูลจำเพาะ iterable เป็นวัตถุพูดobjเช่นนั้นobj[Symbol.iterator]หมายถึงฟังก์ชั่นเพื่อที่เมื่อถูกเรียกกลับวัตถุที่มีnextวิธีการที่จะกลับ{value: ___, done: ___}วัตถุ: function foo() { let i = 0; const wah = { next: function() { if (i <= 2) return { value: (1 + 2 * i++), done: false } else return { value: undefined, done: true } } }; return …

1
remove หากรายละเอียดการใช้งาน
ArrayList::removeIfฉันมีคำถามรายละเอียดการดำเนินงานขนาดเล็กที่ฉันไม่เข้าใจใน ฉันไม่คิดว่าฉันจะทำได้อย่างที่ไม่เคยมีมาก่อน เป็นเช่น: การดำเนินการนั้นเป็นจำนวนมาก ซึ่งแตกต่างจากremove ArrayList::removeตัวอย่างควรทำให้เข้าใจง่ายขึ้น สมมติว่าฉันมีรายการนี้: List<Integer> list = new ArrayList<>(); // 2, 4, 6, 5, 5 list.add(2); list.add(4); list.add(6); list.add(5); list.add(5); และฉันต้องการลบองค์ประกอบทุกอย่างที่เท่ากัน ฉันทำได้: Iterator<Integer> iter = list.iterator(); while (iter.hasNext()) { int elem = iter.next(); if (elem % 2 == 0) { iter.remove(); } } หรือ : list.removeIf(x -> …
9 java  java-8  iterator 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.