github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/slices/slices.go (about) 1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // slices パッケージは、任意の型のスライスで使用できるさまざまな関数を定義します。 6 package slices 7 8 import ( 9 "github.com/shogo82148/std/cmp" 10 ) 11 12 // Equal は、2つのスライスが等しいかどうかを報告します。 13 // 長さが異なる場合、Equal は false を返します。 14 // そうでない場合、要素はインデックスの昇順で比較され、比較は最初の異なるペアで停止します。 15 // 浮動小数点 NaN は等しくないと見なされます。 16 func Equal[S ~[]E, E comparable](s1, s2 S) bool { return false } 17 18 // EqualFunc は、各要素のペアに対して等値性関数を使用して2つのスライスが等しいかどうかを報告します。 19 // 長さが異なる場合、EqualFunc は false を返します。 20 // そうでない場合、要素はインデックスの昇順で比較され、比較は最初の異なるペアで停止します。 21 func EqualFunc[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, eq func(E1, E2) bool) bool { return false } 22 23 // Compare は、s1 と s2 の要素を、各ペアで [cmp.Compare] を使用して比較します。 24 // 要素は、インデックス 0 から順番に比較され、一方の要素が他方と等しくなくなるまで比較が続けられます。 25 // 最初の不一致要素の比較結果が返されます。 26 // どちらかのスライスが終端に達するまで、両方のスライスが等しい場合、短いスライスが長いスライスよりも小さいと見なされます。 27 // 結果は、s1 == s2 の場合は 0、s1 < s2 の場合は -1、s1 > s2 の場合は +1 です。 28 func Compare[S ~[]E, E cmp.Ordered](s1, s2 S) int { return 0 } 29 30 // CompareFunc は、各要素のペアに対してカスタム比較関数を使用して s1 と s2 の要素を比較します。 31 // 結果は、cmp の最初の非ゼロ結果です。cmp が常に 0 を返す場合、結果は len(s1) == len(s2) の場合は 0、len(s1) < len(s2) の場合は -1、len(s1) > len(s2) の場合は +1 です。 32 func CompareFunc[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, cmp func(E1, E2) int) int { 33 return 0 34 } 35 36 // Index は、s 内で最初に v が出現するインデックスを返します。 37 // v が存在しない場合は -1 を返します。 38 func Index[S ~[]E, E comparable](s S, v E) int { return 0 } 39 40 // IndexFunc は、f(s[i]) を満たす最初のインデックス i を返します。 41 // そのようなインデックスが存在しない場合は -1 を返します。 42 func IndexFunc[S ~[]E, E any](s S, f func(E) bool) int { return 0 } 43 44 // Contains は、s 内に v が存在するかどうかを報告します。 45 func Contains[S ~[]E, E comparable](s S, v E) bool { return false } 46 47 // ContainsFunc は、s の少なくとも1つの要素 e が f(e) を満たすかどうかを報告します。 48 func ContainsFunc[S ~[]E, E any](s S, f func(E) bool) bool { return false } 49 50 // Insert は、値 v... を s のインデックス i に挿入し、変更されたスライスを返します。 51 // s[i:] の要素は上にシフトされ、スペースが作成されます。 52 // 返されるスライス r では、r[i] == v[0] であり、r[i+len(v)] == r[i] に元々あった値です。 53 // i が範囲外の場合、Insert は panic を発生させます。 54 // この関数の計算量は O(len(s) + len(v)) です。 55 func Insert[S ~[]E, E any](s S, i int, v ...E) S { return nil } 56 57 // Deleteは、sから要素s[i:j]を削除し、変更されたスライスを返します。 58 // j > len(s)またはs[i:j]がsの有効なスライスでない場合、Deleteはパニックを引き起こします。 59 // DeleteはO(len(s)-i)なので、多くのアイテムを削除する必要がある場合、 60 // 一度に一つずつ削除するよりも、一度に全てを削除するための単一の呼び出しを行う方が良いです。 61 // Deleteは要素s[len(s)-(j-i):len(s)]をゼロにします。 62 func Delete[S ~[]E, E any](s S, i, j int) S { return nil } 63 64 // DeleteFuncは、delがtrueを返すsの任意の要素を削除し、 65 // 変更されたスライスを返します。 66 // DeleteFuncは新しい長さと元の長さの間の要素をゼロにします。 67 func DeleteFunc[S ~[]E, E any](s S, del func(E) bool) S { return nil } 68 69 // Replaceは、要素s[i:j]を与えられたvで置き換え、 70 // 変更されたスライスを返します。 71 // Replaceは、j > len(s)またはs[i:j]がsの有効なスライスでない場合、パニックを引き起こします。 72 // len(v) < (j-i)の場合、Replaceは新しい長さと元の長さの間の要素をゼロにします。 73 func Replace[S ~[]E, E any](s S, i, j int, v ...E) S { return nil } 74 75 // Clone は、スライスのコピーを返します。 76 // 要素は代入を使用してコピーされるため、これは浅いクローンです。 77 // 結果には追加の未使用の容量が含まれる可能性があります。 78 func Clone[S ~[]E, E any](s S) S { return nil } 79 80 // Compactは、等しい要素の連続した実行を単一のコピーで置き換えます。 81 // これはUnixにあるuniqコマンドのようなものです。 82 // Compactはスライスsの内容を変更し、変更されたスライスを返します。 83 // これはより小さい長さを持つ可能性があります。 84 // Compactは新しい長さと元の長さの間の要素をゼロにします。 85 func Compact[S ~[]E, E comparable](s S) S { return nil } 86 87 // CompactFuncは [Compact] と似ていますが、要素を比較するための等価性関数を使用します。 88 // 等しいと比較される要素の連続について、CompactFuncは最初のものを保持します。 89 // CompactFuncは新しい長さと元の長さの間の要素をゼロにします。 90 func CompactFunc[S ~[]E, E any](s S, eq func(E, E) bool) S { return nil } 91 92 // Grow は、必要に応じてスライスの容量を増やし、別の n 要素のスペースを保証します。 93 // Grow(n) の後、スライスには、別の割り当てなしで n 要素が追加できます。 94 // n が負の場合、またはメモリを割り当てるには大きすぎる場合、Grow は panic を発生させます。 95 func Grow[S ~[]E, E any](s S, n int) S { return nil } 96 97 // Clip は、スライスから未使用の容量を削除し、s[:len(s):len(s)] を返します。 98 func Clip[S ~[]E, E any](s S) S { return nil } 99 100 // Reverse は、スライスの要素を逆順にします。 101 func Reverse[S ~[]E, E any](s S) { return } 102 103 // Concat は、渡されたスライスを連結した新しいスライスを返します。 104 func Concat[S ~[]E, E any](slices ...S) S { return nil } 105 106 // Repeatは、指定されたスライスを指定された回数だけ繰り返す新しいスライスを返します。 107 // 結果の長さと容量はlen(x) * countです。 108 // 結果は決してnilになりません。 109 // countが負の場合、または(len(x) * count)の結果がオーバーフローする場合、Repeatはパニックを起こします。 110 func Repeat[S ~[]E, E any](x S, count int) S { return nil }