2016-11-03 16 views
10

Tôi đang cố tạo phương thức trả lại tên thẻ từ Từ điển của tôi một cách ngẫu nhiên.Từ điển C# nhận được mục theo chỉ mục

Từ điển của tôi: Tên được xác định trước của thẻ là chuỗi và thứ hai là giá trị của thẻ đó, là thẻ int.

public static Dictionary<string, int> _dict = new Dictionary<string, int>() 
    { 
     {"7", 7 }, 
     {"8", 8 }, 
     {"9", 9 }, 
     {"10", 10 }, 
     {"J", 1 }, 
     {"Q", 1 }, 
     {"K", 2 }, 
     {"A", 11 } 
    }; 

Phương thức: ngẫu nhiên được tạo ngẫu nhiên int.

public string getCard(int random) 
    { 
     return Karta._dict(random); 
    } 

Vì vậy, vấn đề là:

cannot convert from 'int' to 'string' 

Bất kỳ ai giúp tôi làm thế nào tôi nên làm điều đó đúng để có được tên?

+1

Xin vui lòng gửi mã thực. Điều này thậm chí không biên dịch 'trả về Karta._dict (ngẫu nhiên); ' –

+0

Mã này không biên dịch _dict [" K "] trả về 2, đây là cách bạn lấy nó – mybirthname

+0

@MitchWheat - true - nhưng anh ta muốn vì một lý do nào đó lấy chỉ số .. –

Trả lời

13

này sẽ trả lại chìa khóa của tương ứng với giá trị int được tạo ngẫu nhiên

public string getCard(int random) 
{ 
    return Karta._dict.FirstOrDefault(x => x.Value == random).Key; 
} 

Điều này sẽ trả về Khóa tương ứng với chỉ mục int được tạo ngẫu nhiên

public string getCard(int random) 
{ 
    return Karta._dict.ElementAt(random).Key; 
} 

Side Lưu ý: đó là phần tử đầu tiên của từ điển là The Key và thứ hai là giá trị

+0

Ngay cả với các lần lặp vô hạn, tôi không nghĩ rằng bạn sẽ nhận được mức độ phù hợp đầy đủ khi có các giá trị trùng lặp, mà ông đã cho thấy trong ví dụ của mình. Nó có lẽ luôn luôn mang đến cái "đầu tiên" (mặc dù thứ tự không được đảm bảo .. chỉ là một suy nghĩ). – Quantic

+0

Cảm ơn bạn! Thats chính xác những gì tôi đang tìm kiếm! Tôi đã thử ElementAt quá, nhưng tôi quên sử dụng .Key –

+0

Câu trả lời đầu tiên không dựa trên vị trí, câu trả lời thứ hai là chính xác (mặc dù vẫn còn nhiều cách tốt hơn để làm toàn bộ điều. – BradleyDotNET

2

Khóa của bạn là một chuỗi và giá trị của bạn là một int. Mã của bạn sẽ không hoạt động bởi vì nó không thể tìm kiếm ngẫu nhiên int bạn vượt qua. Ngoài ra, xin vui lòng cung cấp mã đầy đủ

7

Bạn có thể lấy chìa khóa hoặc giá trị mỗi chỉ số:

int value = _dict.Values.ElementAt(5);//ElementAt value should be <= _dict.Count - 1 
string key = _dict.Keys.ElementAt(5);//ElementAt value should be < =_dict.Count - 1 
+0

Chỉ cần chắc chắn để thêm bằng cách sử dụng System.Linq; cho chương trình của bạn vì đây là phương pháp mở rộng LINQ. –

Các vấn đề liên quan