이것에 대한 올바른 구문은 무엇입니까?
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>를 반환한다는 것입니다.
답변
당신이 시도하는 경우
- 여러 구분 기호 사용
- 빈 문자열 필터링
- 선행 / 후행 공백 자르기
다음이 작동합니다.
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());
산출
- 톰
- 크루즈
- 스콧
- 단발
- …에서
이제 다른 사람들이 제안한대로 분명히 순서를 바꿀 수 있습니다.