Đề Xuất 2/2023 # Vòng Lặp Foreach Trong Lập Trình C# Cơ Bản # Top 10 Like | Cuocthitainang2010.com

Đề Xuất 2/2023 # Vòng Lặp Foreach Trong Lập Trình C# Cơ Bản # Top 10 Like

Cập nhật nội dung chi tiết về Vòng Lặp Foreach Trong Lập Trình C# Cơ Bản mới nhất trên website Cuocthitainang2010.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất.

Dẫn nhập

Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về MẢNG NHIỀU CHIỀU TRONG C#. Hôm nay chúng ta sẽ cùng tìm hiểu về cấu trúc lặp foreach trong C#.

Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

Cú pháp và nguyên tắc hoạt động của

foreach

trong C#

Sử dụng

foreach

trong C#

So sánh for và

foreach

trong C#

Cú pháp và nguyên tắc hoạt động của foreach trong C#

Cấu trúc lặp foreach cho phép chúng ta duyệt 1 mảng hoặc 1 tập hợp (sẽ được trình bày trong bài TỔNG QUAN VỀ COLLECTION TRONG C#).

Một số đặc trưng của foreach:

Foreach không duyệt mảng hoặc tập hợp thông qua chỉ số phần tử như cấu trúc lặp for.

Foreach duyệt tuần tự các phần tử trong mảng hoặc tập hợp.

Foreach chỉ dùng để duyệt mảng hoặc tập hợp ngoài ra không thể làm gì khác.

Cú pháp

{

             

 }

Trong đó:

Các từ khoá foreach, in là từ khoá bắt buộc.

Nguyên tắc hoạt động

Foreach cũng có nguyên tắc hoạt động tương tự như các cấu trúc lặp khác cụ thể như sau:

Ở vòng lặp đầu tiên sẽ gán giá trị của phần tử đầu tiên trong mảng vào

biến tạm

.

Thực hiện khối lệnh bên trong vòng lặp

foreach

.

Qua mỗi vòng lặp tiếp theo sẽ thực hiện kiểm tra xem đã duyệt hết mảng hoặc tập hợp chưa. Nếu chưa thì tiếp gán giá trị của phần tử hiện tại vào

biến tạm

và tiếp tục thực hiện khối lệnh bên trong.

Nếu đã duyệt qua hết các phần tử thì vòng lặp sẽ kết thúc.

Qua nguyên tắc hoạt động trên ta có thể thấy:

Biến tạm

trong vòng lặp

foreach

sẽ tương đương với phần tử i trong cách duyệt của vòng lặp

for

(đã trình bày trong bài CẤU TRÚC VÒNG LẶP FOR TRONG C#).

Qua mỗi bước lặp ta chỉ có thể thao tác với giá trị của phần tử đang xét mà không thể tương tác với các phần tử đứng trước nó hay đứng sau nó (trong CẤU TRÚC VÒNG LẶP FOR TRONG C# thì hoàn toàn được).

Bằng cách duyệt của

foreach

ta không thể thay đổi giá trị của các phần tử vì lúc này giá trị của nó đã được sao chép ra một 1 biến tạm và ta chỉ có thể thao tác với

biến tạm

.

Thậm chí việc thay đổi

giá trị

của

biến tạm

cũng không được phép. Nếu ta cố làm điều đó thì sẽ gặp lỗi sau:

Sử dụng foreach trong C#

Trong C#, có những danh sách, tập hợp mà ta không thể truy xuất đến các phần tử của nó thông qua chỉ số phần tử được (ví dụ như kiểu List – sẽ được trình bày trong bài LIST TRONG C# hoặc các collection, generic – sẽ được trình bày trong bài COLLECTION TRONG C# và bài GENERIC TRONG C#).

Trong trường hợp như vậy, để duyệt các danh sách, tập hợp có tính chất như trên thì foreach là lựa chọn tốt nhất.

Chúng ta sẽ tìm hiểu sức mạnh của foreach qua các bài học sau. Còn trong bài học này mình chỉ ví dụ đơn giản để các bạn có thể nắm cú pháp cũng như cách sử dụng foreach.

 Xét chương trình sau:

/* * Khai báo mảng 1 chiều IntArray và khởi tạo giá trị. * Các bạn có thể xem lại cú pháp này ở bài Mảng 1 chiều trong C# * Khai báo 1 biến Sum để chứa giá trị tổng các phần tử trong mảng IntArray. */ int[] IntArray = { 1, 5, 2, 4, 6 }; int Sum = 0; /* * Sử dụng foreach để duyệt mảng và in giá trị của các phần tử trong mảng. * Đồng thời tận dụng vòng lặp để tính tổng các phần tử trong mảng. */ foreach (int item in IntArray) { Console.Write("t" + item); Sum += item; } Console.WriteLine("n Sum = " + Sum);

Có lẽ chúng ta đã không mấy xa lạ với đoạn chương trình trên. Đoạn chương trình trên sẽ duyệt mảng để in ra các giá trị của mảng và tính tổng các phần tử trong mảng.

Nhưng thay vì sử dụng for thì mình sử dụng foreach để các bạn có thể thấy được sự tương đồng giữa các thành phần trong cấu trúc foreach và CẤU TRÚC VÒNG LẶP FOR TRONG C#.

Kết quả khi chạy đoạn chương trình trên:

Ví dụ thứ 2: ta thử sử dụng foreach để duyệt mảng jagged

/* * Khai báo 1 mảng jagged tên là JaggedArray và khởi tạo giá trị. * Các bạn có thể xem lại cú pháp khai báo này ở bài Mảng nhiều chiều trong C#. */ int[][] JaggedArray = { new int[] { 1, 2, 3 }, new int[] { 5, 2, 4, 1, 6}, new int[] { 7, 3, 4, 2, 1, 5, 9, 8} }; /* * Tương tự như dùng for, ta cũng dùng 2 vòng foreach lồng vào nhau để duyệt mảng. */ foreach (int[] Element in JaggedArray) { foreach (int item in Element) { Console.Write(item + " "); } Console.WriteLine(); }

Ta có thể thấy cách duyệt foreach ngắn gọn hơn nhiều so với cách duyệt bằng vòng lặp for thông thường.

Ta cũng chả quan tâm đến việc phải xử lý độ dài mảng hay chỉ số phần tử để truy xuất 1 phần tử nào đó.

Kết quả khi chạy đoạn chương trình trên:

So sánh for và foreach trong C#

Foreach mang trong mình một số ưu điểm như:

Câu lệnh ngắn gọn, sẽ sử dụng.

Rất có ích khi duyệt danh sách, tập hợp mà không thể truy xuất thông qua chỉ số phần tử.

Duyệt các danh sách, tập hợp có số phần tử không xác định hoặc số phần tử thay đổi liên tục.

Tiêu chí

For

Foreach

Khả năng truy xuất phần tử

Truy xuất ngẫu nhiên (có thể gọi bất kỳ phần tử nào trong mảng để sử dụng)

Truy xuất tuần tự (chỉ sử dụng được giá trị phần tử đang xét)

Thay đổi được giá trị của các phần tử

Không

Duyệt mảng, tập hợp khi không biết được số phần tử của mảng, tập hợp

Không

Hiệu suất (tốc độ xử lý) (*)

Đối với mảng, danh sách hoặc tập hợp có khả năng truy xuất ngẫu nhiên thì for sẽ chiếm ưu thế

Đối với mảng, danh sách hoặc tập hợp không có khả năng truy xuất ngẫu nhiên thì foreach chiếm ưu thế

(*) Nhìn chung hiệu suất của for và foreach còn phụ thuộc vào cấu trúc dữ liệu đang xét cho nên việc so sánh này chỉ mang tính chất tham khảo.

Đầu tiên là mảng 1 chiều:

/* Kiểm tra tốc độ của for */ /* * Sử dụng 1 cái đồng hồ để đo thời gian chạy của 2 vòng lặp for và foreach * Ở đây mình chỉ kiểm tra tốc độ chứ không tập trung giải thích cú pháp * Các bạn có thể tìm hiểu thêm. */ Stopwatch start = new Stopwatch(); start.Start(); int[] IntArray = new int[Int32.MaxValue / 100]; int s = 0; int Length = IntArray.Length; for (int i = 0; i < Length; i++) { s += IntArray[i]; } start.Stop(); Console.WriteLine(" Thoi gian chay cua for: {0} giay {1} mili giay", start.Elapsed.Seconds, start.Elapsed.Milliseconds); /* Kiểm tra tốc độ của foreach */ Stopwatch start2 = new Stopwatch(); start2.Start(); int[] IntArray2 = new int[Int32.MaxValue / 100]; int s2 = 0; foreach (int item in IntArray2) { s2 += item; } start2.Stop(); Console.WriteLine(" Thoi gian chay cua foreach: {0} giay {1} mili giay", start2.Elapsed.Seconds, start2.Elapsed.Milliseconds);

 Đoạn chương trình mình thực hiện:

Khai báo 1 mảng 1 chiều có 20 triệu phần tử (khai báo số phần tử lớn để có thể thấy được sự chêch lệch về tốc độ)

Lần lượt dùng

for

,

foreach

để duyệt mảng đó và thực hiện 1 câu lệnh nào đó.

Cuối cùng là xuất ra thời gian thực thi của từng trường hợp dưới dạng giây và mili giây.

 Kết quả khi chạy đoạn chương trình trên:

 Dựa vào kết quả ta có thể thấy được sự chêch lệch nhỏ về tốc độ, nếu kiểm tra với số phần tử lớn hơn hoặc cấu trúc dữ liệu phức tạp hơn thì chêch lệch này càng lớn.

Tiếp theo là đến danh sách liên kết LinkedList:

/* * Khai báo 1 LinkedList chưa các số nguyên int và khởi tạo giá trị cho nó. */ for (int i = 0; i < 100000; i++) { list.AddLast(i); } /* Kiểm tra tốc độ của for */ Stopwatch st = new Stopwatch(); int s1 = 0, length = list.Count; st.Start(); for (int i = 0; i < length; i++) { /* * Vì LinkedList không thể truy xuất thông qua chỉ số phần tử * nên mình phải sử dụng 1 phương thức hỗ trợ làm điều này. * Và đây chính là sự hạn chế của for đối với các cấu trúc dữ liệu tương tự như danh sách liên kết này. */ s1 += list.ElementAt(i); } st.Stop(); /* Kiểm tra tốc độ của foreach */ Stopwatch st2 = new Stopwatch(); int s2 = 0; st2.Start(); foreach (int item in list) { /* * Vì foreach không quan tâm đến chỉ số phần tử nên code viết rất ngắn gọn */ s2 += item; } st2.Stop(); /* In ra giá trị tính tổng giá trị các phần tử khi duyệt bằng for và foreach để chắc chắn rằng cả 2 đều chạy đúng */ Console.WriteLine(" s1 = {0} s2 = {1}", s1, s2); Console.WriteLine(" Thoi gian chay cua for = {0} giay {1} mili giay", st.Elapsed.Seconds, st.Elapsed.Milliseconds); Console.WriteLine(" Thoi gian chay cua foreach = {0} giay {1} mini giay", st2.Elapsed.Seconds, st2.Elapsed.Milliseconds);

 Chương trình mình thực hiện:

Tạo 1

LinkedList

và thêm vào 100000 phần tử.

Sau đó lần lượt dùng

for

,

foreach

duyệt

LinkedList

trên và tính tổng giá trị các phần tử trong mảng.

Cuối cùng in ra thời gian chạy của

for

,

foreach

.

 Kết quả khi chạy chương trình trên là:

 Dựa vào kết quả chạy ta thấy sự chênh lệch là quá lớn, rõ ràng đối với cấu trúc dữ liệu phức tạp, không hỗ trợ truy xuất thông qua chỉ số phần tử nữa thì foreach chiếm ưu thế.

Tuỳ vào từng trường hợp mà ta nên dùng for hay foreach. Không nên lạm dụng 1 thứ quá nhiều.

Kết luận

Nội dung bài này giúp các bạn nắm được:

Cú pháp của

foreach

trong C#.

Sử dụng

foreach

trong C#.

So sánh

for

foreach

trong C#.

Bài sau chúng ta sẽ tìm hiểu về LỚP STRING TRONG C#.

Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Vòng lặp foreach trong lập trình C# cơ bản dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện chúng tôi để nhận được sự hỗ trợ từ cộng đồng.

Cách Sử Dụng Vòng Lặp For &Amp; Foreach Trong Php

1) Vòng lặp là gì !?

– Trong PHP, vòng lặp là một loại cú pháp giúp ta lặp lại việc thực thi một đoạn mã nhiều lần.

– Qua ví dụ trên, ta thấy “vòng lặp” giúp tiết kiệm rất nhiều thời gian trong việc viết những đoạn mã cần thực thi nhiều lần liên tiếp.

– Trong PHP, vòng lặp được chia làm bốn loại:

– Ở bài hướng dẫn này, bạn sẽ được tìm hiểu hai loại vòng lặp là for và foreach

2) Vòng lặp for trong PHP

– Vòng lặp for dùng để lặp lại việc thực thi đoạn mã nào đó một số lần.

2.1) Cú pháp

– Trong đó:

Biểu thức 1 thường là một câu lệnh khai báo biến

(biến này dùng để tham gia vào biểu thức 2)

Biểu thức 2 là một biểu thức điều kiện

(nếu điều kiện đúng thì đoạn mã sẽ được thực thi, còn nếu điều kiện sai thì vòng lặp kết thúc)

Biểu thức 3 thường là một biểu thức làm thay đổi giá trị của biến được khai báo trong biểu thức 1

(mục đích là để cho biểu thức điều kiện dần trở nên bị SAI, giúp vòng lặp được kết thúc)

2.2) Ví dụ thứ nhất

– Sử dụng vòng lặp for để hiển thị ba câu “Lập Trình Web” lên màn hình.

2.3) Ví dụ thứ hai

– Sử dụng vòng lặp for để hiển thị một dãy số tăng dần từ 1 đến 10.

2.4) Ví dụ thứ ba

– Sử dụng vòng lặp for để hiển thị một dãy số giảm dần từ 9 xuống 2.

2.5) Một số điều cần lưu ý

LƯU Ý THỨ NHẤT

– Trong biểu thức 1 của ví dụ thứ nhất, biến i được khai báo với giá trị là 1 nhưng còn ở ví dụ thứ hai thì biến i được khai báo với giá trị là 0.

– Trong biểu thức 2 của ví dụ thứ nhất, biểu thức điều kiện ta dùng phép so sánh <= nhưng còn ở ví dụ thứ hai thì ta dùng phép so sánh <

– Trong biểu thức 3 của ví dụ thứ nhất và thứ hai thì ta tăng giá trị của biến thêm một, còn ở ví dụ thứ ba thì ta giảm giá trị của biến đi một.

– Ví dụ, năm đoạn mã bên dưới có cách viết khác nhau, tuy nhiên chúng có cùng một chức năng là hiển thị bảy câu “Lập Trình Web” lên màn hình

LƯU Ý THỨ HAI

– Biểu thức 1 thường là câu lệnh khai báo biến để tham gia vào biểu thức điều kiện.

– Tuy nhiên, nếu biến dùng để tham gia vào biểu thức điều kiện đã được khai báo và gán giá trị trước đó rồi thì biểu thức 1 có thể bỏ trống.

– Ví dụ:

LƯU Ý THỨ BA

– Biểu thức 3 trong vòng lặp for rất quan trọng, nó khiến điều kiện của vòng lặp dần dần trở thành bị SAI để giúp cho vòng lặp được kết thúc (Nếu một vòng lặp mà điều kiện luôn luôn đúng thì vòng lặp đó sẽ không bao giờ kết thúc và dẫn đến trường hợp chương trình bị lỗi)

– Tuy nhiên, nếu trong đoạn mã được thực thi có chứa câu lệnh làm thay đổi giá trị của biến điều kiện thì biểu thức 3 ta có thể bỏ trống.

– Ví dụ:

LƯU Ý THỨ TƯ

– Trong phần LƯU Ý THỨ HAI & LƯU Ý THỨ BA tôi đã giới thiệu về trường hợp mà biểu thức 1 và biểu thức 3 có thể bỏ trống, tuy nhiên đó là một số trường hợp đặc biệt. Về mặt viết mã lệnh tốt thì bạn không nên bỏ trống biểu thức như thế, bạn cần phải xây dựng đoạn mã như thế nào để cho cả ba biểu thức đều phải có mặt đầy đủ.

2.6) Vòng lặp for lồng nhau

– Thực chất vòng lặp for lồng nhau chỉ là cách sử dụng nâng cao của vòng lặp for thông thường để giúp cho số lần lặp được tăng theo cấp số nhân.

– Vòng lặp con được đặt vào bên trong vòng lặp cha. Khi điều kiện của vòng lặp cha đúng thì vòng lặp con sẽ được thực thi.

– Lưu ý: Bên trong vòng lặp cha, ngoài vòng lặp con thì nó còn có thể chứa thêm các mã lệnh khác.

2.7) Lệnh break

– Lệnh break thường được đặt vào bên trong vòng lặp for.

– Khi lệnh break được thực thi, vòng lặp sẽ kết thúc mặc cho điều kiện của vòng lặp có còn đúng hay không.

2.8) Lệnh continue

– Lệnh continue thường được đặt vào bên trong vòng lặp for.

– Khi lệnh continue được thực thi, những câu lệnh còn lại của lần lặp hiện tại sẽ bị bỏ qua.

2.9) Lặp qua một lần các phần tử của mảng

– Ta có thể sử dụng vòng lặp for để lặp qua một lần các phần tử trong mảng.

3) Vòng lặp foreach trong PHP

– Vòng lặp foreach chỉ làm việc với mảng (Array)

– Vòng lặp foreach dùng để lặp lại việc thực thi một đoạn mã nào đó với số lần lặp lại bằng với số phần tử của mảng (Ví dụ: nếu mảng có 5 phần tử thì đoạn mã sẽ được thực thi lặp lại 5 lần)

– Trong mỗi lần lặp, giá trị của phần tử mảng hiện tại sẽ được lưu vào một biến.

– Cú pháp:

foreach ($array as $value) {

Hướng Dẫn Cơ Bản Oxygen Not Included

Oxygen Not Inlcuded là một game xây dựng không dễ chơi chút nào, bạn có thể sẽ bối rối khi mới chơi bởi vì có quá nhiều thứ. Nên nắm được một vài điểm cơ bản dưới đây sẽ làm bạn đỡ mất thời gian mày mò, cũng như hiểu sâu thêm một chút về gameplay.

Hiểu rõ các chỉ số của Duplicant

Attributes:

Athletics: Tốc độ di chuyển

Cooking: Tốc độ nấu ăn

Digging: Tốc độ đào

Medicine: Khả năng kháng bệnh và tốc độ hồi phục sau khi chấn thương

Tinkering: Độ hiệu quả khi vận hành máy móc

Construction: Tốc độ xây dựng

Creativity: Tốc độ và độ hiệu quả khi thực hiện công việc Trang Trí

Learning: Tốc độ lên cấp kỹ năng (như đào, nấu ăn…) và độ hiệu quả khi thực hiện công việc Nghiên Cứu

Strength: Trọng lượng tối đa có thể mang trên người và độ hiệu quả khi chiến đấu

Traits (có lợi)

Mole Hands: Digging +5

Twinkletoes: Athletics +5

Uncultured: Decor Expectation -20

Early Bird: +2 cho tất cả kỹ năng vào buổi đầu của ngày mới

Diver’s Lungs: Lượng khí tiêu thụ -25 g/s

Amphibious: Tốc độ di chuyển dưới nước bằng với trên cạn

Quick Learner: Learning +5

Iron Gut: Có thể ăn bất cứ thứ gì mà không bị bệnh

Grease Monkey: Tinkering +5

Night Owl: +3 cho tất cả kỹ năng vào ban đêm (trừ Creativity)

Naturally Robust: Miễn dịch với các loại bệnh thông thường

Interior Decorator: Creativity +5, Decor Expectation +5

Traits (bất lợi)

Biohazard: Dễ bị bệnh

Bottomless Stomach: Lượng calories tiêu thụ -0.8 kcal/s

Yokel: Không thể thực hiện công việc Nghiên Cứu

Scaredy-Cat: Không thể chiến đấu

Gastrophobia: Không thể nấu nướng

Loud Sleeper: Ngáy to và sẽ đánh thức các Duplicant trong phạm vi gần

Mouth Breather: Lượng khí tiêu thụ +100 g/s

Anemic: Athletics -5

Narcoleptic: Có thể ngủ bất cứ lúc nào vào ban ngày

Flatulance: Thỉnh thoảng xì hơi và làm ô nhiễm Oxy

Slow Learner: Learning -3

Irritable Bowel: Đi vệ sinh lâu hơn, Bladder Efficiency -0.5

Small Bladder: Đi vệ sinh nhiều lần hơn, Bladder Charge +0.2 %/s

Decor Expectation

Khu vực có chỉ số Decor thấp hơn Decor Expectation của Duplicant sẽ làm tăng độ Stress của Duplicant đó, ngược lại nếu chỉ số Decor cao hơn Decor Expectation thì sẽ làm giảm độ Stress.

Stress Response

Duplicant sẽ ngưng mọi thứ và làm một trong hai việc sau để giải tỏa Stress (khi đạt 100% Stress):

Vomiter: Duplicant sẽ ngưng mọi việc đang làm và ói, tạo nên một vũng nước bị ô nhiễm trên sàn

Destructive: Duplicant sẽ ngưng mọi việc đang làm và phá hủy máy móc đến khi hư thì mới ngưng

Chọn 3 Duplicant đầu tiên

Khi chọn 3 Duplicant đầu tiên thì tốt nhất là bạn nên chọn có tất cả các điểm ở các chỉ số, như vậy là để các công việc đầu tiên được diễn ra suôn sẻ, vì mỗi kỹ năng đều có ít nhất một điểm nên tốc độ của cả 3 Duplicant sẽ khá hơn khi thực hiện nhiều loại công việc. Bạn cũng nên tránh chọn các Duplicant có Trait Flatulance hoặc Loud Sleeper, Duplicant có Flatulance sẽ xì hơi và làm ô nhiễm không khí, còn Loud Sleeper thì sẽ đánh thức các Duplicant trong lúc ngủ – như vậy thì các Duplicant bị đánh thức sẽ làm việc không hiệu quả vào ngày hôm sau. Ngoài ra bạn cũng nên chọn các Duplicant có ít nhất một điểm Learning để lên cấp kỹ năng nhanh hơn.

Với gameplay hiện tại thì bạn sẽ không tạo ra nước được, nên nước là thứ khá khan hiếm. Nên để về lâu về dài bạn buộc phải có một nguồn nước ổn định, mà nguồn nước đó là từ Duplicant mà ra. Bạn sẽ tạo nước bằng cách chọn những Duplicant có Stress Respone là Vomiter, sau này khi cần tạo ra nước bạn tăng độ Stress để cho các Duplicant này nôn ra (contaminated water) sau đó đem lọc lại là có nước sạch.

Pause game khi mới vào để nhìn xung quanh

Bước đầu tiên khi mới khởi tạo một gameworld mới là nên pause game lại, sau đó xem xét tình hình xung quanh. Bạn sẽ lên kế hoạch trước mình sẽ đào ở đâu, đào như thế nào. Để đào cho hợp lý thì bạn nên đào tới những nơi có tài nguyên luôn, khởi đầu thì các tài nguyên quan trọng là kim loại thô chủ yếu là đồng (Copper), tảo (Algae), tất nhiên thứ không thể thiếu nữa là Oxy, còn các loại xà bần như Sandstone hay Dirt thì bạn không cần lo vì có rất nhiều. Sau khi lên kế hoạch hết rồi thì bạn có thể cho game chạy tiếp và thực hiện kế hoạch của mình. Bạn cũng nên lưu ý tốc độ sản xuất Oxy cũng phải đáp ứng đủ với tốc độ mở rộng của bạn, vì vậy đừng ham hố mà đào quá nhiều và rộng trong khi Oxy không đủ cung cấp cho các Duplicant.

Không được đào Oxylite

Oxylite là một loại đá có thể tự sản xuất ra Oxy theo thời gian, nhưng viên đá này sẽ tan dần giống như viên C sủi vậy. Đây là nguồn cung cấp Oxy ổn định cho bạn trong khoảng 3-4 ngày trong game (gọi là Cycle). Nếu bạn đào Oxylite, viên đá sẽ sẽ bị phá hủy – cung cấp một lượng khí Oxy nhiều nhưng sẽ không tiếp tục sản xuất được nữa. Vì vậy đào gì thì đào, bạn phải né Oxylite ra, nếu không bạn sẽ thiếu hụt Oxy vào các ngày kế tiếp trong khi chưa xây kịp máy tạo Oxy.

Ưu tiên các khu vực đã có sẵn Oxy

Khu vực mà bạn bắt đầu sẽ có sẵn Oxy và ít nhất một viên Oxylite kèm theo, khi mở rộng từ chỗ đó ra bạn nên ưu tiên nhưng khu vực đã có sẵn Oxy trong đó. Những khu đó bạn có thể tận dụng xây luôn những thứ cần thiết, như máy phát điện – giường hay các loại máy khác. Để xem chỗ nào có Oxy hay không thì bạn nhìn những gợn không khí trong đó màu đen hay màu xanh là biết ngay, hoặc đơn giản hơn là bấm F1 nếu thấy trong đó màu xanh là được.

Xây nhà xí càng sớm càng tốt

Nhà xí là thứ không thể thiếu, nơi để các Duplicant đi theo tiếng gọi thiên nhiên. Bạn nên xây ít nhất từ 1 đến 2 cái nhà xí khi có thể. Vì nếu không có thì Duplicant sẽ xả tại chỗ, làm ô nhiễm nước và cả không khí nữa, khi bạn chưa nghiên cứu được cách chế tạo được thiết bị lọc mùi và lọc nước thì bạn không muốn việc này xảy ra đâu.

Chế tạo máy móc và mạng lưới điện

Thứ đầu tiên mà bạn cần làm là chế tạo máy phát điện, sau đó chế tạo những máy móc cơ bản như: máy tạo thức ăn, máy tạo Oxy, 2 trạm nghiên cứu. Vị trí đặt ở đâu thì tùy vào bạn, nhưng tốt nhất là nên đặt gần nhau một chút để khi đi dây diện sẽ ít tốn tài nguyên hơn. Ngoài ra bạn cũng chế tạo thêm ít nhất 2 cục pin nhỏ để trữ năng lượng từ máy phát điện.

Sự chuyển động của các loại khí

Trong game sẽ có 3 loại khí cơ bản mà bạn thường gặp nhất là Hydro, Oxy và Carbon Dioxide. CO2 sẽ nặng hơn 2 khí còn lại và luôn chìm dưới đáy, H2 nhẹ nhất nên sẽ luôn trồi lên trên, còn O2 sẽ ở nằm ở giữa 2 loại khí kia. Cũng chính vì vậy mà vấn đề lưu thông khí cũng rất quan trọng, đôi lúc bạn sẽ gặp trường hợp một cụm khí bị kẹt ở đâu đó mà không di chuyển được. Bạn cũng có thể giải quyết bằng cách chế máy bơm khí và dẫn bằng đường ống, nhưng cách tốt nhất là bạn nên tập trung nguồn tạo Oxy ở dưới cùng, rồi sau đó xây cao lên, khí CO2 sẽ tự động chìm xuống đáy ở chỗ nguồn tạo Oxy, khí Oxy sau khi tạo xong sẽ tự động tràn lên phía trên. Còn H2 thì rất nhẹ nên bạn chỉ có thể bơm bằng máy rồi dẫn theo đường ống tới nơi mong muốn.

Thứ tự nghiên cứu

Research là mấu chốt để phát triển, nhưng chọn sai có thể làm bạn mất thời gian hơn, hoặc tệ hơn là phải chơi lại từ đầu. Thứ tự Research tốt nhất là Farming Tech đầu tiên, để bạn có thể trồng được nguyên liệu để sản xuất lương thực, ngoài ra còn có thể sản xuất được Oxy mà không cần điện nhờ Algae Terrarium. Kế đến bạn có thể chọn Gas Piping hoặc Liquid Piping tùy gameworld, nhưng đa số là Liquid Piping vì 2 nhánh kế tiếp của Liquid Piping quan trọng và cần thiết hơn. Hai nhánh kế tiếp của Liquid Piping cho bạn khả năng khử mùi không khí và lọc nước nên rất quan trọng sau này. Power Regulation và Interior Decor thì nên để sau này khi mọi thứ đã ổn định thì bạn hãy nghiên cứu.

So Sánh Foreach Và Map Trong Javascript

1.Định nghĩa forEach() và map()

Theo như trên trang MDN, forEach và map được định nghĩa như sau:

forEach() – executes a provided function once for each array element.

map() – creates a new array with the results of calling a provided function on every element in the calling array.

Chính xác nó có nghĩa là gì?

forEach và map giống nhau ở điểm: đều thực hiện hàm callback lên từng phẩn tử ở trong mảng

Khác nhau ở điểm:

không trả về giá trị nào cả

có trả về giá trị

hàm callback có thể thay đổi trực tiếp mảng ban đầu

tạo ra một mảng mới có cùng số phần tử với mảng cũ và trả về mảng mới này

2. Ví dụ

Giả sử mình có 1 mảng sau

Và mình muốn nhân đôi giá trị của mỗi phần tử trong mảng mà không muốn sử dụng vòng lặp for

Lưu ý, bạn sẽ không bao giờ return từ 1 hàm forEach vì các giá trị return về đều bị loại bỏ (undefined)

Kết quả giống hệt nhau phải không ạ. Vây bây giờ hay xem tốc độ của 2 thằng

3. So sánh tốc độ

https://jsperf.com/ là một trang web khá tốt để so sánh tốc độ của các phương thức Javascript khác nhau. Đây là kết quả thu được

Như bạn có thể thấy map() nhanh hơn 21% so với forEach đối với trình duyệt mình đang sử dụng, còn với trình duyệt của bạn có lẽ sẽ ra kết quả khác.

Demo https://jsperf.com/so-sanh-foreach-va-map

4. Cái nào dùng tốt hơn?

Nó phụ thuộc vào việc bạn muốn thực hiện

Nếu không muốn thay đổi dữ liệu trong mảng nhưng thay vào đó chỉ muốn làm gì đó với nó – như lưu nó vào cơ sở dữ liệu hoặc log ra màn hình thì dùng forEach

Nếu muốn thay đổi dữ liệu ra 1 mảng mới với tốc độ tốt hơn thì dùng map

Tổng kết

Những gì forEach() làm được thì map() cũng có thể làm được và ngược lại.

map() cấp phát bộ nhớ và lưu trữ các giá trị trả về, forEach() thì bỏ qua các giá trị trả về

forEach() cho phép gọi hàm callback để thay đổi mảng hiện tại, thay vào đó map() sẽ trả về một mảng mới.

Nguồn https://codeburst.io/javascript-map-vs-foreach-f38111822c0f

All Rights Reserved

Bạn đang đọc nội dung bài viết Vòng Lặp Foreach Trong Lập Trình C# Cơ Bản trên website Cuocthitainang2010.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!