2014-04-07 5 views
2

아래에 표시된대로 문자열 배열이 있습니다. 문자열 배열을 반복하고 각 문자열 요소의 네 번째 문자를 항상 1로 인쇄합니다.문자열 배열의 문자 액세스

각 요소의 네 번째 문자가 1이면 if 문을 구현하려고했습니다. 다음 무언가를 인쇄하려면,하지만 내가 반복 iterating 각 요소에 액세스하는 방법을 모르겠습니다.

내가하려고하는 것을 강조 표시하기 위해 의사 코드로 if 문을 추가했습니다. 도움 주셔서 감사합니다.

 namespace ConsoleApplication6 
     { 
      class Program 
       { 
      static void Main() 
       { 
     string[] bitstrings = new string[16]; 
     bitstrings[0] = "00101"; 
     bitstrings[1] = "00001"; 
     bitstrings[2] = "00001"; 
     bitstrings[3] = "00101"; 
     bitstrings[4] = "00101"; 
     bitstrings[5] = "00101"; 
     bitstrings[6] = "00101"; 
     bitstrings[7] = "00101"; 
     bitstrings[8] = "00101"; 
     bitstrings[9] = "00101"; 
     bitstrings[10] = "00101"; 
     bitstrings[11] = "00101"; 
     bitstrings[12] = "00101"; 
     bitstrings[13] = "00101"; 
     bitstrings[14] = "00101"; 
     bitstrings[15] = "00101"; 

     for (int x = 0; x < bitstrings.Length; x++) 
     { 

      int s = bitstrings[x][4]; 
      Console.ReadLine(); 



     } 

     if(/*all bitstrings[x][4] = 1*/) 
     { 
      //print something 
     } 

    } 
} 
} 

답변

3
if (bitstrings.All(s => s[3] == '1')) 
{ 
    //printSomething 
} 

이는 LINQ true를 돌려 "모든"기능을 활용하는 경우와 컬렉션의 모든 요소가 제공 조건을 만족하는 경우에만. 이 경우 술어는 전달 된 문자열의 네 번째 요소가 문자 '1'이면 참을 리턴합니다.

네 번째 요소는 C# (대부분의 언어와 마찬가지로)이 해당 배열에 대해 0부터 시작하는 인덱스를 사용하기 때문에 "3"으로 인덱싱됩니다. 이 솔루션을 사용하려면 코드 파일에 using System.Linq을 추가해야 할 수도 있습니다.

0

이와 비슷한 기능이 있습니까?

static bool AllBitsEqual(IEnumerable<string> source , int offset , char value) 
{ 
    return source.All(x => offset < x.Length && x[offset] == value) ; 
} 

또는

static bool AllBitsEqual(IEnumerable<string> source , int offset , char value) 
{ 
    return source.Aggregate(true , (acc,s) => acc &= (s.Length > offset && s[offset] == value)) ; 
} 

또는 심지어 ...

static bool AllBitsEqual(IEnumerable<string> source , int offset , char value) 
{ 
    bool flag = true ; 
    foreach (string s in source) 
    { 
    flag &= (s.Length > offset && s[offset] == value) ; 
    } 
    return flag; 
} 
5

코드는 약이, 당신은 단지 기억해야 그 문자열의 각 문자 값에 관계없이, 여전히 성격입니다. if 문은 for 루프에도 있어야했습니다.

for (int x = 0; x < bitstrings.Length; x++) 
{ 
    //3 instead of 4 because arrays are 0 indexed 
    if(bitstrings[x][3] == '1') 
    { 
     //valid char 
    } 
} 
//Also don't need to read like every iteration. 
Console.ReadLine(); 

편집 : 모든 네번째 요소는 1이어야합니다 다음 부울을 포함하려면이를 수정하고 유효하지 않은 문자가

bool allOne = true; 
for (int x = 0; x < bitstrings.Length; x++) 
{ 
    //3 instead of 4 because arrays are 0 indexed 
    if(bitstrings[x][3] != '1') 
    { 
     allOne = false; 
     break; 
    } 
} 
if(allOne) 
{ 
    //Do something 
} 

Console.ReadLine(); 
+0

주를 발견하는 경우 탈출 : 고의로 LINQ – Sayse

+1

과 답변을 작성하지 의심의 여지가없는 올바른 LINQ 솔루션. 그냥 사이드 노트 (오타, 정말) 거기에 "루프"와 같은 건 없다;) – BradleyDotNET

+0

내가 어 .. 그것을 발명 :) 건배 – Sayse