2015-01-11 2 views
1

mapId라는 정수와지도 번호로 구성된 세 개의 int 배열의 컬렉션이 있다고 가정 해 보겠습니다. 사용자가있는지도에 따라 항목이 생성됩니다. 이 예에서는 common_item, uncommon_itemrare_item의 세 가지 항목을 참조 할 수 있습니다. 내가 뭘 찾고있어C에서 다중 int 배열을 비교하는 int #

int mapId; 

int[] easyMaps = { 7, 10, 3, 44 }; 
int[] mediumMaps = { 17, 14, 32, 11, 79, 80, 82, 90, 111 }; 
int[] hardMaps = { 92, 98, 112, 145 }; 

는 뭔가 같은 :
플레이어는 쉬운지도, 산란에있는 경우 : common_item
플레이어가 중간 난이도지도, 산란 경우 : uncommon_itemcommon_item
플레이어, 하드지도에 산란 경우 : rare_item, uncommon_itemcommon_item

어떻게 루프에 대해 별도의 세 가지를 작성하고 별도로 세 개의 배열을 통해 반복하지 않고이 작업을 수행 할 수 있을까? 배열과 루프를 많이 사용하지 않고도 계층 구조의 개념을 달성 할 수있는 더 좋은 방법이 있습니까?

답변

2

다른 답변 외에도 System.Linq 네임 스페이스에있는 다른 옵션은 Contains입니다.

그런 작성할 수

if(easyMaps.Contains(mapId)) { 
    //stuff 
} 

나는 개인적으로 그의 가독성을 선호합니다.

2

이러한 각 배열을 수동으로 반복 할 필요는 없습니다. Array.IndexOf<int>(array, value)을 사용할 수 있습니다. 이 함수는 지정된 배열에있는 값의 index을 반환하거나 배열에없는 경우 -1을 반환합니다. 당신은 다음과 유사한 진술 경우 사용할 수 있습니다

if(Array.IndexOf<int>(easyMaps, mapId) != -1){ 
    //Spawn common_item 
} 
1

당신은 Array.Exists 방법을 사용할 수 있습니다 여기에 다음과 같은 :

if(Array.Exists(easyMaps, mapId)) {  // common_items 
    // your logic 
} 

if(Array.Exists(mediumMaps, mapId)) { // uncommon_items 
    // your logic 
} 

if(Array.Exists(hardMaps, mapId)) {  // rare_items 
    // your logic 
} 

희망이 도움이 될 것입니다!

0

문제하십시오의 mapId 감안할 때
는 난이도를 얻을 후 산란을하기 위해 무엇을 결정합니다.

솔루션 :
사용하십시오 Dictionary 사전에 조회 배열을 검색하는 것보다 더 빠르게 될 것입니다있는 추가 혜택과 함께, 레벨에의 mapId에서 링크를 유지합니다.

namespace StackOverflow27884119 
{ 
    public enum Level 
    { 
     Easy, 
     Medium, 
     Hard 
    } 

    class Program 
    { 
     private static Dictionary<int, Level> mapsDictionary = new Dictionary<int, Level>() 
       { 
        {7, Level.Easy}, {10, Level.Easy}, {3, Level.Easy}, {44, Level.Easy}, 
        {17, Level.Medium}, {14, Level.Medium}, /*...*/ {111, Level.Medium}, 
        {92, Level.Hard}, {98, Level.Hard}, {112, Level.Hard}, {145, Level.Hard}, 
       }; 

     static void Main(string[] args) 
     { 
      var mapId = 3; 
      SpawnItem(3); 
     } 

     private static void SpawnItem(int mapId) 
     { 
      Level level; 
      bool found = mapsDictionary.TryGetValue(mapId, out level); 
      if (found) 
      { 
       switch (level) 
       { 
        case Level.Easy: 
         // spawn common_item 
         break; 
        case Level.Medium: 
         // spawn common_item 
         // spawn uncommon_item 
         break; 
        case Level.Hard: 
         // spawn common_item 
         // spawn uncommon_item 
         // spawn rare_item 
         break; 
       } 
      } 
     } 
    } 
} 

추신 : 내가 정확히 정확히 항목을 산란을 이해하지 않았다 의미

여기에 코드입니다. 어떤 종류의 행동이라면 스위치 케이스 대신 전략 패턴을 사용하는 방법을 생각해 볼 수 있습니다.