2013-11-28 3 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

'사전'은 순서가 없습니다. 따라서 순서를 변경하려고 시도하는 것은 의미가 없습니다 (다른 방식으로 '임의로 바꾸기'). –

+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(); : 메서드 shuffle 0 인수에 오류가 없습니다. – user3044300

+0

메서드를 호출하려면 'Random' 개체에 대한 참조를 전달해야합니다. 이 방법은'Random' 객체가 항상 무작위 적이 지 않기 때문에 짧은 기간에 두 개의 인스턴스를 인스턴스화하면 코드에 영향을 미칠 수 있습니다. 이런 종류의 정적 필드에서 참조를 보유하는 것이 더 좋을 것입니다. 참조를 너무 길게 잡는 것을 피하기 위해'WeakReference' 객체로 래핑 할 것입니다. – Enigmativity

관련 문제