php 편집기 Strawberry는 `sort.Slice` 기능에 대한 몇 가지 중요한 정보를 소개합니다. Go 언어에서는 'sort.Slice' 함수를 사용하여 슬라이스를 정렬하지만, 정렬된 결과의 순서는 정의되지 않습니다. 즉, 동일한 입력 슬라이스에 대해 정렬 결과가 매번 다를 수 있습니다. 이는 `sort.Slice` 함수가 빠르고 효율적인 정렬 알고리즘을 사용하지만 구체적인 정렬 순서는 입력 데이터의 특정 조건에 따라 결정되기 때문입니다. 따라서 `sort.Slice` 함수를 사용할 때 특정 정렬 순서에 의존하는 시나리오에서 문제를 피하기 위해 정렬 결과의 비결정성을 알고 있어야 합니다.
go 표준 라이브러리의 sort.slice
对字符串切片进行排序。我希望它们按字母顺序排序,除了我希望空字符串出现在所有其他字符串之后(因此我不能只使用 sort.strings
)을 사용하려고 합니다.
기능이 적다면 다음이 효과가 있을 것 같습니다.
으아악단, 응모순서에 따라 무작위로 답변을 드리는 것 같습니다. 입니다:
으아악이것은 몇 번 실행한 결과입니다:
func(i, j int) bool { return s[j] == "" || s[i] < s[j] }
이는 less()
함수가 원하는 것을 말하지 않기 때문입니다.
비어 있지 않은 모든 문자열 다음에 빈 문자열을 정렬하고 싶다고 말씀하셨습니다. 당신의 논리:
으아악이것은 두 번째 항목이 다른 항목보다 ""
,那么第一个就更少。这或多或少是正确的(除非两者都是空的,“is-less”并不是真的:它们是相等的)。但是,如果第一个是 ""
而第二个不是怎么办?那么你的函数应该返回 false
但它返回 s[i] < s[j]
。如果第二个不为空,则为 true
,告诉 ""
작은지 알려줍니다. 이는 원하는 것과 정반대입니다.
올바른 "is-less" 관계는 다음과 같습니다.
으아악두 번째만 ""
인 경우 첫 번째가 더 적기를 원합니다. 첫 번째 항목만 비어 있으면 "다음 이상"이 되기를 원합니다. 그렇지 않으면 일반 순서(바이트별)가 사용됩니다.
go 놀이터에서 사용해 보세요.
첫 번째 값과 두 번째 값이 모두 비어 있으면 false
,因为 ""
不小于 ""
(它们相等)。这是要返回的正确值,尽管在此处返回 true
가
false
를 반환합니다(동일함). 반환할 올바른 값입니다. 여기서 true
를 반환하면 여전히 올바른 순서가 적용되지만(빈 요소를 교체하면 동일한 결과가 발생함) 교체 횟수가 줄어들 수 있습니다.
커스텀 로직에서는 하나의 문자열만 비어 있으면 정상적인 순서에서 벗어나게 됩니다. 이것이 논리적 XOR(XOR) 관계a xor b
是 true
如果只有 a
或只有 b
是 true
。在 go 中,没有逻辑 xor
运算符,但 a xor b
相当于 a != b
입니다:
true
(否则为 false
빈 문자열이 "감지"된 경우 결과는
으아악 이것은 더 짧고 더 효율적일 수 있지만 보시다시피 이해하기가 더 어렵습니다. 성능이 중요한 경우에만 이 옵션을 사용하십시오. go 놀이터
에서 사용해 보세요. 🎜위 내용은 `sort.Slice` 순서가 정의되지 않았습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!