2014-11-05 3 views
0

나는 같은 구조의 텍스트 파일이 있습니다. 예 :주기 동일한 데이터 매개 변수를 동일한 인스턴스

A -> B, C, D 
B -> E, D 
C -> A, F 

나는 모든 위치와 목적지를 저장하는 위치라는 기본 클래스가 있습니다.

Location locA = new Location(); 
Location locB = new Location(); 

내가 좋아하는 forexample, 모든 사람을위한 새로운 인스턴스를하지 않고 동일한 인스턴스 위치를 사용에 관심이 있어요 : 난 내 텍스트 파일을 분할있을 때

Connection(locA, locB)); 
Connection(locA, locC)); 
Connection(locA, locD)); 
Connection(locB, locE); 

문제입니다. 첫 번째 행을 목록 안에 넣고 있습니다. 목적지를 다른 목록에 표시합니다. :

foreach (var line in File.ReadLines(@"routes.txt")) 
       { 

        foreach (Match oMatch in Regex.Matches(line, @"\{([^,]*)")) 
        { 
         ComboBox1.Items.Add(oMatch.Groups[1].Value); 
         Startloc.Identifier = DKLocations.Count().ToString(); 
         Startloc.LocationName.Add(oMatch.Groups[1].Value); 
         DKLocations.Add(Startloc); 

         var dest = Regex.Matches(line, @"\p{L}+") 
         .Cast<Match>() 
         .Skip(1) 
         .Select(match => match.Value) 
         .ToList(); 

         var price = Regex.Matches(line, @"\d+") 
         .Cast<Match>() 
         .Select(match => match.Value) 
         .ToList(); 

         var destAndPrice = dest.Zip(price, (d, p) => new { dest = d, price = p }); 

         foreach (var i in destAndPrice) 
         { 

          ListBox1.Items.Add(oMatch.Groups[1].Value + " to " + i.dest + " " + i.price + " kr." + DKLocations.Count().ToString()); 

         } 
        } 

어떻게하면 분할 시작 위치로 대상 동일한 인스턴스를 제공 :

여기
DKLocations Startloc = new DKLocations(); 
DKLocations Destloc = new DKLocations(); 

List<DKLocations> DKLocations = new List<DKLocations>(); 

내 코드는 이렇게 요금인가?

+0

필요에 따라 리콜 할 수 있도록 위치를 사전에 저장해야하는 것처럼 들립니다. –

답변

1

"메모하기"패턴을 원하는 것처럼 들립니다.

C#에서는 대개 사전을 사용합니다. 예 :

Location location; 

if (!memos.TryGetValue(locationId, out location)) 
{ 
    location = new Location(locationId); 
    memos[locationId] = location; 
} 

// do stuff with location now 

중요한 것은 당신이 원하는 Location 인스턴스를 식별하는 방법을하는 것입니다, 다음과 같은 것을 사용

Dictionary<string, Location> memos = new Dictionary<string, Location>(); 

는 데이터를 읽을 그런 다음, 먼저 사전 확인 사전에있는 키.

관련 문제