2013-11-28 58 views
-2

我的代碼遇到了問題。值已被隨機複製,我不知道如何防止隨機重複。刪除字典中的隨機重複

這裏是我的代碼:

public static Dictionary<TKey, TValue> Shuffle<TKey, TValue>(
    this Dictionary<TKey, TValue> source) 
{ 
    Random r = new Random(); 
    return source.OrderBy(x => r.Next()) 
     .ToDictionary(item => item.Key, item => item.Value); 
} 
+4

'Dictionary'是無序的,因此嘗試改變順序(通過「洗牌」或任何其他方式)是沒有意義的。 –

+0

爲什麼downvote?這根本不是一個壞問題。 OP已經解釋了這個問題,併發布了代碼。 – Baldrick

回答

0

爲了避免重複,你需要保留隨機的實例。

考慮以下...

public static Dictionary<TKey, TValue> Shuffle<TKey, TValue>(
    this Dictionary<TKey, TValue> source, Random r) 
{ 
    return source.OrderBy(x => r.Next()) 
     .ToDictionary(item => item.Key, item => item.Value); 
} 

祝您好運!

+0

謝謝,但不工作,我不能在dictonary中使用shuffle方法,例如:shuffled01 = dict01.Shuffle(); :錯誤沒有過載的方法洗牌0參數 – user3044300

+0

要調用該方法,你需要傳遞一個引用到「隨機」對象。這樣做是因爲'Random'對象不總是非常隨機的,如果你在短時間內實例化兩個實例並且這可能會影響你的代碼,那麼你冒着重複的隨機數序列的風險。我寧願在靜態字段中爲這種事情持有引用。爲了避免引用太長,我會將它包裝在一個'WeakReference'對象中。 – Enigmativity