2012-06-08 2 views
1

예를 들어, 배열에 넣은 텍스트 파일을 가져 와서 다음을 사용하여 해당 배열을 전체 중지로 분할했습니다 (각 문장이 새 배열의 자체 인덱스에 있음).C#에서는 문자열 배열의 각 인덱스에있는 단어의 수를 어떻게 계산합니까?

textSplitArray = textArray[j].Split('.'); 

그럼 어떻게 textSplitArray의 각 색인에있는 단어의 수를 계산하여 가장 많은 단어가있는 문장을 결정합니까? 이 작업을 수행 할 수 있습니까 아니면 다른 방식으로해야합니까?

나는 모든 곳에서 검색을 시도했다하지만 당신은이 긴

var result = textSplitArray.OrderByDescending(x => x.Split(' ').Length) 
          .FirstOrDefault(); 

그리고 경우를 사용 (즉, 최대 단어 포함) 인 문장을 알고 싶다면 답

+0

무엇을 시도 했습니까? 이것은 두 개의 for 루프를 사용하여 해결할 수있는 기본적인 문제입니다. – alexn

+1

"예"와 같은 일반적인 약어를 올바르게 처리하고 있습니까? –

+0

오, 고마워. 나는 상당히 새로운데, 나는 다른 배열을 나눠서 생성 된 배열의 인덱스를 처리하는 방법에 대해 확신하지 못했다. – Csharpener

답변

1

을 찾을 수 없습니다 그 긴 문장에있는 단어의 수를 알고 싶어 사용

int Max = textSplitArray.Max(x => x.Split(' ').Length); 

또는

int Max = result.Length; 

문장의 두 단어가 공백으로 구분 될 수 있기 때문에 그 이유는 각각 ' ' 개를 기준으로 각 문장을 나눈 것입니다.

+2

맞고, 하나를 얻으려면 : var longestSentence = textSplitArray. OrderByDescending (x => x.Split ('') .Length) .First();'. (어떤 문장에 가장 많은 단어가 있는지를 묻는 질문) – Jcl

+0

편집에 추가 한 것으로 보입니다. – Jcl

+0

계산하기 전에 이중 영역을 제거하십시오. (일부 국가에서는 2 개의 공백으로 새 문장을 시작하는 것이 일반적입니다.) –

0

이 같은 람바다 식을 사용할 수 있습니다

var max = textSplitArray.Select((s,i) => 
    { 
     return new { value = s.Split(' ').Count() , index = i}; 
    }).OrderByDescending(item=>item.value).FirstOrDefault(); 
int maxValue = max.value; 
int maxPos = max.index; 


//this will return anonymous object that has two properties : {index , value} that refers to item's value and it's position in the sequence. 

확인하는 것이 도움이되는 경우.

0
string[] source = textSplitArray.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries); 

source.Length()입니다.

1
string[] textSplitArray = textArray[j].Split('.'); 
     foreach (string s in textSplitArray) 
     { 
      int NumberOfWords = s.Split(' ').Length;     
     } 
관련 문제