2008-08-20 27 views
9

Nếu tôi có biến trong C# cần được kiểm tra để xác định xem biến đó có bằng một trong các tập hợp biến hay không, cách tốt nhất để làm điều này?Cách ngắn gọn nhất để xác định xem biến có bằng một giá trị từ 'danh sách' của các giá trị

Tôi không tìm kiếm giải pháp lưu trữ tập hợp trong một mảng. Tôi tò mò hơn để xem nếu có một giải pháp có sử dụng logic boolean trong một số cách để có được câu trả lời.

Tôi biết tôi có thể làm một cái gì đó như thế này:

int baseCase = 5; 
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5; 

tôi tò mò để xem nếu tôi có thể làm điều gì đó như thế này:

int baseCase = 5; 
bool testResult = baseCase == (3 | 7 | 12 | 5); 

Rõ ràng là trên sẽ không làm việc, nhưng tôi muốn xem liệu có cái gì đó ngắn gọn hơn ví dụ đầu tiên của tôi, mà phải lặp lại cùng một biến lặp đi lặp lại cho mỗi giá trị thử nghiệm.

UPDATE:
tôi quyết định chấp nhận câu trả lời CoreyN như nó có vẻ như các phương pháp đơn giản nhất. Đó là thực tế, và vẫn còn đơn giản cho một người mới để hiểu, tôi nghĩ.

Thật không may khi tôi làm việc hệ thống của chúng tôi sử dụng khuôn khổ .NET 2.0 và không có cơ hội nâng cấp bất kỳ thời gian sớm. Có bất kỳ giải pháp khác ra khỏi đó mà không dựa vào .NET framework 3.5, bên cạnh một rõ ràng nhất mà tôi có thể nghĩ đến:

new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5); 
+0

Đây là .NET 2.0 giải pháp, phức tạp hơn một chút so với Corey: http://stackoverflow.com/questions/18407#153037 – Joe

+0

Ví dụ về javascript http://stackoverflow.com/questions/12116326 – Lijo

Trả lời

16
 bool b = new int[] { 3,7,12,5 }.Contains(5); 
0

Tôi thường sử dụng CoreyN 's solution đối với trường hợp đơn giản như cái đó. Mọi thứ phức tạp hơn, sử dụng truy vấn LINQ.

-1

Vì bạn không chỉ định loại dữ liệu bạn có làm đầu vào, tôi giả sử bạn có thể phân đoạn đầu vào của bạn thành lũy thừa từ 2 -> 2,4,8,16 ... Điều này sẽ cho phép bạn sử dụng các bit để xác định xem giá trị thử nghiệm của bạn có phải là một trong các bit trong đầu vào hay không.

4 => 0.000.100
16 => 0.010.000
64 => 1000000

sử dụng một số phép toán nhị phân ...

testList = 4 + 16 + 64 => 1010100
testValue = 16
testResult = testList & testValue

1

Bạn có thể làm điều gì đó tương tự với .NET 2.0, bằng cách tận dụng thực tế là một mảng o f T thực hiện IList <T> và IList <T> có phương pháp Chứa. Vì vậy sau đây là tương đương với giải pháp .NET 3.5 của Corey, mặc dù rõ ràng là chưa rõ ràng:

bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5); 

Tôi thường sử dụng IList <T> cho tờ khai mảng, hoặc ít nhất là cho qua các đối số mảng một chiều. Nó có nghĩa là bạn có thể sử dụng các thuộc tính IList như Count, và chuyển từ một mảng thành một danh sách một cách dễ dàng. Ví dụ.

private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 }; 
Các vấn đề liên quan