What's 는 가장 빠른 방법은 값을 복사하고 열쇠 중 하나로 사전에서 또 다른 C#?

StackOverflow https://stackoverflow.com/questions/81552

  •  09-06-2019
  •  | 
  •  

문제

거기에있을 것 같지 않은 사전입니다.AddRange()메소드가 있습니다.지 않는다 더 나은 방법을 사본을 항목하는 또 다른 사전을 사용하지 않고 foreach 다.

내가 사용하는 시스템입니다.컬렉션이 있습니다.일반적입니다.사전입니다.이습니다.NET2.0.

도움이 되었습니까?

해결책

아무것도 잘못한/foreach 다.모든 가상 AddRange 방법습니다.

만 추가 우려 나가는 메모리 할당 행동하기 때문에,추가하는 큰 항목의 수를 일으킬 수 있는 여러 재할당 횟수와 다시 해시입니다.방법이 없 의 용량을 증가시키기 위해 기존 사전에 의해 지정된 금액입니다.당신이 더 있을 수도 있습을 할당하는 새로운과 함께 사전을 위해서 충분한 적재능력을 모두 현재 사람,하지만 당신은 여전히 필요한 반복을 로드하는 적어도 그들 중 하나입니다.

다른 팁

Dictionary 생성자는 다른 Dictionary.

당신은 그것을 캐스팅 IDictionary, 지만,거기 Add() 과부하가 걸리 KeyValuePair<TKey, TValue>.당신은 아직도 사용하여 foreach,하지만.

var Animal = new Dictionary<string, string>();

통과할 수 있는 기존하는 동물 사전 생성자입니다.

Dictionary<string, string> NewAnimals = new Dictionary<string, string>(Animal);

재미를 위해 만들고,이 확장은 방법을 사전입니다.이렇게 깊은 복사본을 어디든지 가능합니다.

public static Dictionary<TKey, TValue> DeepCopy<TKey,TValue>(this Dictionary&lt;TKey, TValue> dictionary)
        {
            Dictionary<TKey, TValue> d2 = new Dictionary<TKey, TValue>();

            bool keyIsCloneable = default(TKey) is ICloneable;
            bool valueIsCloneable = default(TValue) is ICloneable;

            foreach (KeyValuePair<TKey, TValue> kvp in dictionary)
            {
                TKey key = default(TKey);
                TValue value = default(TValue);
                if (keyIsCloneable)
                {
                    key = (TKey)((ICloneable)(kvp.Key)).Clone();
                }

                else
                {
                    key = kvp.Key;
                }

                if (valueIsCloneable)
                {
                    value = (TValue)((ICloneable)(kvp.Value)).Clone();
                }

                else
                {
                    value = kvp.Value;
                }

                d2.Add(key, value);
            }

            return d2;
        }

만약 당신이 다루는 기존의 두 개를 얻을 수 있습니다,당신은 몇 마일리지 CopyTo 방법: http://msdn.microsoft.com/en-us/library/cc645053.aspx

Add 메서드를 사용하여 다른 모음(수신기)흡수하다.

내가 이해하지 않는 이유를 사용하지 않는 사전에(사전에)(에 의해 제안 ageektrapped).

당신은 당신을 수행하려는 얕은 복사하거나 깊은 복사합니까?(즉,모두 사전를 가리키는 동일한 참조 또는 새로운 복사본에 모든 객체의 내부에는 새로운 사?)

당신이 원하는 경우를 만들기 사전를 가리키는 체,나는 유일한 방법 이라고 생각을 통해 이 foreach.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top