Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức Enumerable.Repeat trong C#

Phương thức Enumerable.Repeat(T element, int count) trong namespace System.Linq tạo một chuỗi (sequence) lặp lại một giá trị cho số lần xác định. Trả về IEnumerable.

Ví dụ: Lặp số 10 năm lần

var val = Enumerable.Repeat(10, 5);
// Kết quả: 10, 10, 10, 10, 10

Mã nguồn hoàn chỉnh

using System;
using System.Linq;

class Demo
{
    static void Main()
    {
        var val = Enumerable.Repeat(10, 5);
        
        foreach (int res in val)
            Console.WriteLine(res);
    }
}

Kết quả

10
10
10
10
10

Các trường hợp sử dụng phổ biến

Mục đíchCode
Khởi tạo mảng/list giá trị mặc địnhvar arr = Enumerable.Repeat(0, 100).ToArray();
Tạo chuỗi lặp để testvar testData = Enumerable.Repeat("test", 1000);
Kết hợp với Zipvalues.Zip(Enumerable.Repeat(factor, values.Count), (v,f) => v*f)
Default value cho left joinleft.GroupJoin(right, ..., (l, r) => r.DefaultIfEmpty(defaultVal))

Lưu ý

  • Thực thi trì hoãn (deferred) - không cấp phát bộ nhớ cho toàn bộ mảng ngay lập tức.
  • Gọi .ToArray() hoặc .ToList() để thực thi ngay và cấp phát bộ nhớ.
  • count < 0 ném ArgumentOutOfRangeException.
  • Với reference type, tất cả phần tử trỏ đến cùng một instance (shallow copy).

Ví dụ reference type

var lists = Enumerable.Repeat(new List(), 3).ToArray();
lists[0].Add(1);
Console.WriteLine(lists[1].Count);  // 1 - cùng object!

Khắc phục: Enumerable.Range(0, 3).Select(_ => new List())