Microsoft MVP성태의 닷넷 이야기
Dictionary와 Linq [링크 복사], [링크+제목 복사],
조회: 3528
글쓴 사람
guest
홈페이지
첨부 파일
 

Dictionary와 List는 검색속도가 Dictionary가 우월한 것으로 알고 있습니다
다만, Dict는 foreach로 Value가 변경되지 않아서 for문을 사용해야 되는 것으로 압니다

그렇다면 아래와 같이 Value를 Class의 Object를 넣을 수 있으므로
굳이 List를 쓰는 경우라면 Class 내의 Method를 써야 하는 경우 밖에 없는 것같습니다

제 말이 맞는 지요?

   Dictionary<string, BookClassObj> bookDict = new Dictionary<string, Book>();
   booksDict.Add("Joe", new BookClassObj("Essential C# 4.0", 2013));
   booksDict.Add("Jane", new BookClassObj("Visual C Sharp 2012 Step by Step", 2014));
   booksDict.Add("Mindy", new BookClassObj("Professional C 2012 and .NET 4.5", 2014));








[최초 등록일: ]
[최종 수정일: 4/17/2023]


비밀번호

댓글 작성자
 



2023-04-17 04시41분
제목은 "Dictionary와 Linq"로 질문과는 무관한 것 같고.

"굳이 List를 쓰는 경우라면 Class 내의 Method를 써야 하는 경우 밖에 없는 것"이라고 했는데, 어떤 의미로 질문한 것인지 좀 더 부연 설명해 주세요.

-----

참고로, "다만, Dict는 foreach로 Value가 변경되지 않아서 for문을 사용해야 되는 것으로 압니다"라고 하셨는데, List 역시 value를 변경할 수 없습니다.

List<string> list = new List<string>() { "test", "list" };

foreach (var item in list)
{
    list[0] = "test2"; // System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
}

List의 indexer 코드를 보면 역시 _version을 증가하고 있는데요,

public T this[int index]
{
    ...[생략]...

    set
    {
        ...[생략]...
        _items[index] = value;
        _version++;
    }
}

이런 것을 봤을 때, 단순히 컬렉션의 수를 변경하는 정도의 수준이 아닌, 마이크로소프트는 컬렉션의 순회 동안 요소의 값까지 변경해서는 안 된다고 결정하는 것 같습니다. (위의 소스코드에서도 알 수 있지만, 요소가 복합 타입인 경우 그 타입의 멤버가 변경되는 것까지는 막지 못합니다.)
정성태
2023-04-17 06시10분
[guest] class MyClass
{
  // Class members
  string color = "red"; // field
  int maxSpeed = 200; // field
  public void fullThrottle() // method
  {
    Console.WriteLine("The car is going as fast as it can!");
  }
}

딕셔너리는 fullThrottle()를 사용할 수 없으므로 List로 써야하는 경우로 생각됩니다
[guest]
2023-04-17 06시11분
[guest] Linq 부분은 Dictionary가 List보다 검색속도가 훨씬 빠른데
Linq를 사용하면 속도가 많이 좁혀지냐는 질문을 하려했는데
[guest]
2023-04-17 06시16분
[guest] List 업데이트 문제
List<string>은 말씀하셨듯이 에러가 발생하나
List<T>는 객체 속성값 update 시 에러가 발생하지 않는 것같습니다

용어의 혼돈이 있었네요
[guest]

1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5857guest3/17/20233110귀도 반 로썸을 보고 [4]
5856guest3/17/20233298Form1_FormClosing에 closing time을 Sqlite 저장하는 법? [6]파일 다운로드1
5855욜로3/17/20232869C# 메타데이터에서 불러오는 참조 정의가 안됨 [1]
5854민성3/16/20233047안녕하세요 asp.net mvc using문 관련하여 [1]
5853pa3/16/20233323오피스 2016 업데이트 후 파일 출력 불가 [1]
5852guest3/16/20233022입력 foreach 검색/출력 foreach [3]
5851guest3/15/20233349foreach내 list변경 [10]
5850독서가3/14/20233044C#에서 동적dll 사용시 문의입니다. [4]파일 다운로드1
5849guest3/9/20233051C# wpf로 Web에서 구동되는 hts가능한가요? (노트북없고 스마트폰 없음) [4]
5848민성3/9/20232973도움 요청드립니다. [2]파일 다운로드1
5847guest3/7/20233161SQlike Like 구문 - 1시간째 인데 안되네요 [13]
5846Huuu...3/7/20232832웹 다운로드에 대한 고찰 [5]파일 다운로드1
5845guest3/7/20232863C# Split함수의 불친절함 [1]
5844까망이3/7/20232997c# 무료 디컴파일러는 어떤게 좋습니까? [1]
5843guest3/7/20233014판매 후 dll 등 에러 [5]
5842kr13/6/20233030publish 할 때 분석기 관련 dll 제외 [5]
5841guest3/3/20233206프로그램 판매 시 - Upgrade 버전 판매 [2]
5840joe3/2/20233314C# 클래스 라이브러리 수정 -> C++에서 참조시 함수 목록 갱신되지 않음. [4]파일 다운로드1
5839guest3/2/20233885윈도우 서비스 프로그램 - FORM 애플리케이션 감시서비스 [8]
5838랄랄라3/1/20233139event 사용 시 두 표현의 차이점이 있을까요? [1]
5837감사합니...2/28/20233316오라클 DB서버 접속관련 문의 드립니다.(Load Balancing, HA Events) [2]
5836박지범2/27/20233080static instance의 initialize 순서가 보장되나요? [6]
5835주민호2/25/20236013Windows Software Development Kit - 최신버전 1개 남기고 다 삭제하면 안되는지요? [10]파일 다운로드1
5834guest2/24/20233226Python IDE - 비주얼스튜디오 [3]
5833무지남2/23/20232832Async 메서드 그리고 나서 Bool 메서드 [5]
5832김지우2/21/20233144event와 delegate의 차이 , event를 써야하는 이유 [1]
1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...