[c#] C # 구문-문자열을 쉼표로 배열로 분할, 일반 목록으로 변환 및 역순

이것에 대한 올바른 구문은 무엇입니까?

IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();

내가 뭘 망 쳤어? TSource는 무엇을 의미합니까?



답변

문제는 당신이 전화하고 있다는 것입니다 List<T>.Reverse()있는 반환 void.

다음 중 하나를 수행 할 수 있습니다.

List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();

또는:

IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();

후자는 더 많은 비용이 듭니다. 임의의 값 IEnumerable<T>을 되돌리려면 모든 데이터를 버퍼링 한 다음 모든 데이터를 생성하는 것이 포함되기 때문입니다. 반면에 List<T>모든 역방향 “인플레 이스”를 수행 할 수 있습니다. (여기서 차이점 Enumerable.Reverse<T>()List<T>.Reverse()인스턴스 메서드 대신 확장 메서드를 호출한다는 것 입니다.)

더 효율적이지만 다음을 사용할 수 있습니다.

string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();

이렇게하면 부적절한 크기의 버퍼가 생성되는 것을 방지 할 수 있습니다. 4 개의 명령문을 사용하는 대신 실제 사용 사례에서 성능 대비 가독성을 비교합니다.


답변

나는이 질문이 꽤 오래되었다는 것을 알고 있지만 내 문자열에 공백이 포함되어 있다는 점을 제외하면 비슷한 문제가 있습니다. 쉼표 이상으로 문자열을 구분하는 방법을 알아야하는 사람들을 위해 :

string str = "Tom, Scott, Bob";
  IList<string> names = str.Split(new string[] {","," "},
  StringSplitOptions.RemoveEmptyEntries);

StringSplitOptions는 공백 문자 일 뿐인 레코드를 제거합니다.


답변

List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();

이것은 작동합니다.


답변

이 시도:

List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();


답변

여기서 누락 된 것은 .Reverse ()가 void 메서드라는 것입니다. .Reverse ()의 결과를 변수에 할당 할 수 없습니다. 그러나 Enumerable.Reverse () 사용 순서를 변경하고 결과를 얻을 수 있습니다.

var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()

차이점은 Enumerable.Reverse ()가 void return 대신 IEnumerable <T>를 반환한다는 것입니다.


답변

당신이 시도하는 경우

  1. 여러 구분 기호 사용
  2. 빈 문자열 필터링
  3. 선행 / 후행 공백 자르기

다음이 작동합니다.

string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str
                            .Split(new char[]{',', '|'})
                            .Where(x=>x!=null && x.Trim().Length > 0)
                            .Select(x=>x.Trim());

산출

  • 크루즈
  • 스콧
  • 단발
  • …에서

이제 다른 사람들이 제안한대로 분명히 순서를 바꿀 수 있습니다.


답변