Go의 표준 입력에서 숫자 구문 분석
Go에서는 개발자가 여러 숫자 입력을 사용하여 여러 변수를 사용하여 개별 값을 캡처할 수 있습니다. 하지만 이 프로세스를 단순화하고 모든 숫자를 단일 배열이나 슬라이스에 저장하려면 어떻게 해야 할까요?
다음 코드 조각을 고려하세요.
numbers := make([]int, 2) fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])
이 코드는 두 숫자를 효율적으로 읽고 저장합니다. 숫자 조각에 표시됩니다. 그러나 입력 수가 많은 경우 이 접근 방식은 장황해질 수 있습니다.
fmt.Fscan()을 사용하여 숫자를 슬라이스로 직접 읽을 수 있습니까?
불행하게도 fmt 패키지는 기본적으로 슬라이스 스캔을 지원하지 않습니다. 이러한 제한을 극복하기 위해 모든 슬라이스 요소의 주소를 인터페이스 배열로 압축하는 사용자 정의 유틸리티 함수를 생성할 수 있습니다.
func packAddrs(n []int) []interface{} { p := make([]interface{}, len(n)) for i := range n { p[i] = &n[i] } return p }
이 함수는 슬라이스를 반복하여 각 요소에 대한 포인터 배열을 생성합니다. .
packAddrs() 함수를 사용하여 슬라이스로 스캔
packAddrs() 함수를 사용하면 이제 다음과 같이 슬라이스로 스캔할 수 있습니다.
numbers := make([]int, 2) n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...) fmt.Println(numbers, n, err)
packAddrs() 함수는 슬라이스를 인터페이스 배열로 변환하여 fmt.Fscan()이 각 요소를 스캔할 수 있도록 합니다.
fmt.Sscan()을 사용하는 예 테스트
numbers := make([]int, 5) n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...) fmt.Println(numbers, n, err)
이 예에서는 fmt.Sscan()을 사용하여 코드를 테스트하고 있습니다. 문자열을 입력으로 사용하고 스캔된 값을 반환합니다. 이 코드의 출력은 다음과 같습니다.
[1 3 5 7 9] 5 <nil>
이는 packAddrs() 유틸리티 함수를 사용하여 여러 숫자를 슬라이스로 효율적으로 읽을 수 있는 방법을 보여줍니다.
위 내용은 `fmt.Fscan()`을 사용하여 Go 슬라이스에서 여러 숫자를 효율적으로 읽으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!