2012-08-22 2 views
2

내가 할 수있는 최선을 설명하려고 노력하겠습니다.LINQ C# 문자열에서 문자 선택

기본적으로 char 배열로 변환 한 문자열이 있는데 LINQ를 사용하여 char 배열 내부의 다른 문자를 선택한 다음 내림차순으로 정렬하지만 문자 만 잡아주고 문장 부호는 사용하지 않습니다. 여기에 코드입니다 :

string inputString = "The black, and, white cat"; 
var something = inputString.ToCharArray(); 
var txtEntitites = something.GroupBy(c => c) 
        .OrderByDescending(g => g.Count()) 
        .Where(e => Char.IsLetter(e)).Select(t=> t.Key); 

그리고 오류 메시지가 내가 얻을 :

  • 오류 CS1502이 : char.IsLetter (문자) ''에 가장 적합한 오버로드 된 메서드에 일치하는 일부 잘못된 인수가 (CS1502)

  • 오류 CS1503 : 인수 #1' cannot convert System.Linq.IGrouping (CS1503)

어떤 아이디어를 '표현'문자를 입력하기 위해 '? 고마워요 :)

답변

5

이 시도 :

string inputString = "The black, and, white cat"; 
var something = inputString.ToCharArray(); 
var txtEntitites = something.GroupBy(c => c) 
          .OrderByDescending(g => g.Count()) 
          .Where(e => Char.IsLetter(e.Key)) 
          .Select(t=> t.Key); 

참고 Char.IsLetter(e.Key))

또 다른 아이디어는 쿼리 다시 정렬하는 것입니다 또한 당신이 inputString.ToCharArray()에 대한 호출이 필요하지 않습니다주의

varinputString = "The black, and, white cat"; 
var txtEntitites = inputString.GroupBy(c => c) 
           .OrderByDescending(g => g.Count()) 
           .Select(t=> t.Key) 
           .Where(e => Char.IsLetter(e)); 

String은 이미 IEnumerable<Char>입니다.

+1

찾고있는 것을 생각 :) 그리고 불평이나 질문 하를 요구하는 저를 표시하지 주셔서 감사합니다! – Phorce

+2

귀하의 질문에 짧고 간결하며 오류 메시지에 대한 좋은 정보를주었습니다. 그래서 투표를했습니다 :-) – MikeKulls

2

귀하의 WHERE 절에서 해당 문맥에서 e은 귀하의 그룹이 아닌 문자입니다. 문자가 문자인지 확인하려면 키를 테스트해야합니다.

//... 
.Where(g => Char.IsLetter(g.Key)) 
1

난 당신을 감사 이것이 당신이

string inputString = "The black, and, white cat"; 
var something = inputString.ToCharArray(); 
var txtEntitites = something.Where(e => Char.IsLetter(e)) 
        .GroupBy(c => c) 
        .OrderByDescending(g => g.Count()).Select(t=> t.Key); 
-1
List<char> charArray = (
     from c in inputString 
     where c >= 'A' && c <= 'z' 
     orderby c 
     select c 
    ).Distinct() 
    .ToList();