3

제목이 대부분입니다. C#의 기본 Dictionary 클래스에 간단한 확장 메서드를 추가하고 싶습니다. 처음에는 Stack (스택) 메서드와 비슷한 Pop (TKey 키)이라는 이름을 지정하려고했지만 조회를 위해 사용할 키를 허용합니다."집합에서 요소 찾기, 제거 및 반환"을위한 용어?

그런 다음 Take (TKey 키)를 수행하려고했으나 같은 이름의 LINQ 메서드와 일치합니다 ... C# 3.0을 사용하면 작업을 수행 할 수 있지만 좋아하지 않습니다.

그렇다면 Pop을 고수하거나 "요소 찾기 및 제거"에 대한 더 나은 용어가 있습니까?

는 (나는 그런 사소한 문제처럼 보인다,이 질문을 물어 종류의 당황 ...하지만이 표준을 사용하기 좋아하고 나는 많은 언어/환경과 폭 넓은 경험을 필요가 없습니다.)

편집 : 죄송합니다, 더 설명해야합니다 ....이 인스턴스에서 나는 이미 새로운 메서드로 확장하는 클래스에 의해 정의 된 이후 제거라는 용어를 사용할 수 없습니다.

편집 2 : 좋아, 말하자면 지금까지, 군중의 지혜에 의해 영감을 무엇 다음 Remove(key) method already provided?

에 특히 잘못에

public static TValue Extract<TKey, TValue> 
(
    this Dictionary<TKey, TValue> dict, 
    TKey key 
) 
{ 
    TValue value = dict[key]; 
    dict.Remove(key); 
    return value; 
} 

public static bool TryExtract<TKey, TValue> 
(
    this Dictionary<TKey, TValue> dict, 
    TKey key, 
    out TValue value 
) 
{ 
    if(!dict.TryGetValue(key, out value)) 
    { 
     return false; 
    } 
    dict.Remove(key); 
    return true; 
} 
+1

전혀 질문에 대해 간단한 내용이 없습니다. 좋은 이름을 선택하는 것이 훨씬 좋다. 수년간 함께 살아야한다. (또는 더 나쁜 것은 누군가와 함께 살게한다.) –

답변

8

나는 지상에있는 미라가, 을 제거한 다음 반환이 박물관 :

+0

당신은 각성하고 있습니다. 나는 비유를 좋아한다. 또한 군대가 군대를 철수하기 위해 들어갈 때 군대가 부르는 것입니다. –

+0

나는 비유를 좋아하지만, 그것들을 훨씬 더 단순하게 만듭니다 ... – Mark

+0

그래, RemoveElement보다 낫다. –

1

아무것도 오 당신이 원하는, 대기 또한 요소를 반환하려면?

object valueRemoved = someDictionary.RemoveElement(key) 

에 대해 쉽게했을 것이다

if (!dict.ContainsKey(key)) 
{ 
    return null; 
} 
object val = dict[key]; 
dict.Remove(key); 
return val; 
+0

글쎄, 그것은 요소를 반환하지 않으므로 항상 2 줄의 코드가된다. 제거), 프로젝트 전체에서 수천 번 수행해야 할 일이기 때문에 표준 확장 방법에 대한 나쁜 생각이 아닙니다. –

+0

또한 죄송합니다. 답변하기 전에 제목을 변경하면 이전에 "찾기 및 제거"라고 말하고 "찾기, 제거 및 반환"하지 않았습니다. –

+0

엘리먼트를 제거하십시오. 더 짧은 이름이 나오면 나는 건너 뛸지도 모르지만 작동 할 수도 있습니다! 내가 일하러 돌아올 때 그것에 대해 생각해보고 여기에서 또 다른 팝업을 볼 수 있습니다. –

1

내 첫번째 추측으로 구현하는 방법 "가라"하지만, 당신이 지적했듯이, 그것은 이미 사용 중입니다. 나의 다음 제안은 "Extract"또는 "Detach"이지만, 모호 할 수 있습니다.

"철수"또는 "PullOut"은 어떻습니까?

+0

실제로 TakeItem을 사용할 것이다. , 스티븐 A. 로우 (Stephen A. Lowe)가 실제로 사용하고자하는 메소드 다음에 Item을 추가합니다. 그래서 그것은 제가 사용하는 경우 두 사람 모두에게 반 신용입니다. 나는이 질문에 대해 '답변자'로 표시하는 대신 답변을 범했습니다. –

+0

오케이, 당신은 원래 Extract 녀석입니다. 그러나 Mark의 비유는 나를 위해 그것을 끌어 들였습니다. 비용을 개의치 않고 모든 사람들이 내게서 하나의 포인트를 얻습니다. –

1

이 작업에 약간 오래된 협력 연상 고고학자 찾기 때처럼, 추출을 생각한다 플랫폼 (주로 학술)은 Linda이라고합니다. 그 환경에서, 당신이 말하는 것은 "in"이라고 불릴 것입니다. 하지만 그 이름은 끔찍한 이름입니다. 공유 튜플 공간의 관점에서 이름을 붙 였기 때문에 기본적으로 이름이 거꾸로 붙었습니다. 그래서, 신경 쓰지 마라.

추출물이 좋으며 "팝"도 꽤 분명합니다. 스택이 아니더라도 누구나 자신이하고있는 것을 알 수 있습니다.

+0

우수. 나는 완전히 독학하기 때문에 이러한 문제에 공식 교육을받은 사람으로부터 약간의 의견을 얻게되어 기쁘다. 나는 그것과 관련 메서드 bool TryExtract (TKey 키, TValue 값)가 있고 TryPop 소리가 나에게 wierd이기 때문에 나는 현재 Extract를 고수 할 것이라고 생각한다. :) –