2011-10-29 3 views
10

을 감안할 때 :문자 배열을 문자열 배열로 변환하는 방법은 무엇입니까?

나는 내가 주 문자열 (즉 "Monday", "Wednesday", "Friday" 또는 "Monday", "Thursday", "Friday", "Sunday")의 일의 목록을 가질 수 분할 및 문자열의 컬렉션을 만들 필요가 문자열 dayCodes (즉 "MWF" 또는 "MRFU").

// this causes a run-time exception because you can't cast Char to String 
var daysArray = days.ToCharArray().Cast<string>().ToArray(); 

// for each dayCode, overwrite the code with the day string. 
for (var i = 0; i < daysArray.Length; i++) 
{ 
    switch (daysArray[i]) 
    { 
     case "M": 
      daysArray[i] = "Monday"; 
      break; 

     case "T": 
      daysArray[i] = "Tuesday"; 
      break; 

     case "W": 
      daysArray[i] = "Wednesday"; 
      break; 

     case "R": 
      daysArray[i] = "Thursday"; 
      break; 

     case "F": 
      daysArray[i] = "Friday"; 
      break; 

     case "S": 
      daysArray[i] = "Saturday"; 
      break; 

     case "U": 
      daysArray[i] = "Sunday"; 
      break; 
    } 
} 

daysArray[daysArray.Length - 1] = "and " + daysArray[daysArray.Length - 1]; 

return string.Join(", ", daysArray); 

문제 :

문제는 당신이 Char 내가 하나가 다른로부터 상속되지 않기 때문에 의미가 추측 String에 캐스팅 할 수 없다는 것입니다. 컴파일러는 을 1 문자 길이로 변환한다고 생각할 것입니다. String.

처음부터 List<string>을 만들 필요가 없도록 빠른 방법 (Cast<string>() 사용)이 있습니까?

답변

21

그냥 일하는 것이 char.ToString()를 사용하여 :

var daysArray = days.ToCharArray().Select(c => c.ToString()).ToArray(); 
또는

, 내 마음에 더 나은 솔루션을 사용자가 매핑 사전에 직접 문자열을 사용하지 않는 이유 :

var daysArray = days.Select(c => dayMapping[c]).ToArray(); 

dayMapping 하루 종일 이름에 매핑되는 :

Dictionary<char, string> dayMapping = new Dictionary<char,string>() 
{ 
    { 'M', "Monday" }, 
    { 'T', "Tuesday" } 
    //and so on 
} 
+2

여기에 매직 문자열 대신 System.DayOfWeek 열거 형을 사용하는 것도 고려해 볼 가치가 있습니다. – uglybugger

+0

@uglybugger 나는 모든 메소드에'.ToString()'을 호출 할 필요가 없도록 문자열을 연결하는 것을 제외하고는 동의한다. – DJTripleThreat

2
char[] daysCodeArray = days.ToCharArray(); 
string[] daysArray = daysCodeArray.Select(el => 
{ 
    switch (el) 
    { 
     case 'M': 
      return "Monday"; 

     case 'T': 
      return "Tuesday"; 

     case 'W': 
      return "Wednesday"; 

     case 'R': 
      return "Thursday"; 

     case 'F': 
      return "Friday"; 

     case 'S': 
      return "Saturday"; 

     case 'U': 
      return "Sunday"; 
    } 
    throw new ArgumentException("Invalid day code"); 
}).ToArray(); 

원하는 경우 람다를 별도의 방법으로 변경할 수 있습니다.

+0

+1 나는 당신을 몰랐다. 람다와 함께 할 수 있어요. – James

+0

+1 꽤 예쁘다. – DJTripleThreat

1

이 작업을 수행 할 수 있습니다

  var dayCode = "MWF"; 
      var daysArray = new List<string>(); 
      var list = new Dictionary<string, string>{ 
       {"M", "Monday"}, 
       {"T", "Tuesday"}, 
       {"W", "Wednesday"}, 
       {"R", "Thursday"}, 
       {"F", "Friday"}, 
       {"S", "Saturday"}, 
       {"U", "Sunday"} 
      }; 

      for(int i = 0,max = dayCode.Length; i < max; i++) 
      { 
       var tmp = dayCode[i].ToString(); 
       if(list.ContainsKey(tmp)) 
       { 
        daysArray.Add(list[tmp]); 
       } 
      } 
      Console.WriteLine(string.Join(",", daysArray)); 

출력 : 설명

enter image description here

1

가 검색이를 찾는 사람을위한 제목에 질문 ... (안 문제에 답하려면 ... 이전 글 중 하나임)

var t = "ABC";
var s = t.ToCharArray(). (c => c.ToString())을 선택하십시오 .ToArray();

관련 문제