Golang 删除切片中的null值
在本文中,我们将学习如何使用不同的示例从切片中删除null值。切片是一系列元素,就像数组一样。数组是一个固定的元素序列,而切片是一个动态数组,意味着它的值是不固定的,可以改变的。切片比数组更高效更快,而且它们是通过引用而不是值传递的。让我们通过示例学习如何执行它。
方法1:使用for循环
在这种方法中,我们将看到如何使用for循环在外部函数中删除切片中的null值。让我们通过算法和代码来了解它是如何完成的。
语法
func append(slice, element_1, element_2…, element_N) []T
append函数用于向数组切片添加值。它接受多个参数。第一个参数是要向其中添加值的数组,后面是要添加的值。然后该函数返回包含所有值的最终数组切片。
步骤
- 步骤1 − 创建一个main包,并在程序中声明fmt(格式化包)包,其中main生成可执行代码,fmt帮助格式化输入和输出。
-
步骤2 − 创建一个main函数,在该函数中创建一个包含一些值(包括空值)的切片。
-
步骤3 − 创建一个名为removenullvalue的函数,其参数为一个切片。
-
步骤4 − 创建一个名为result的空切片,该result将用于附加其中的非nil元素。
-
步骤5 − 循环直到切片的长度,并在每次迭代中检查切片的元素是否不等于null,将这些元素附加到result中并继续下一次迭代。
-
步骤6 − 循环结束后,将输出切片返回给函数。
-
步骤7 − 使用fmt.Println()函数将输出切片打印在控制台上,其中ln表示换行。
示例
Golang程序使用for循环从切片中删除null的示例。
package main
import "fmt"
func removenullvalue(slice []interface{}) []interface{} {
var output []interface{}
for _, element := range slice {
if element != nil { //if condition satisfies add the elements in new slice
output = append(output, element)
}
}
return output //slice with no nil-values
}
func main() {
slice := []interface{}{10, 20, nil, 30, nil, 40} //create slice
fmt.Println("The original slice is:", slice)
slice = removenullvalue(slice)
fmt.Println("The slice after removal of null value is:")
fmt.Println(slice) // Output: [1 2 3 4]
}
输出
The original slice is: [10 20 30 40]
The slice after removal of null value is:
[10 20 30 40]
方法2:使用过滤器
在这个示例中,我们将看到如何使用外部函数的for循环来从切片中删除空值。让我们通过算法和代码来看看是如何完成的。
语法
func append(slice, element_1, element_2…, element_N) []T
append函数用于向数组切片中添加值。它接受多个参数。第一个参数是要添加值的数组,然后是要添加的值。该函数返回包含所有值的最终数组切片。
步骤
- 步骤1 - 创建一个main包,并在程序中声明fmt(格式化包)包,其中main生成可执行代码,fmt用于格式化输入和输出。
-
步骤2 - 创建main函数,并在该函数中创建一个包含非nil值和nil值的切片。
-
步骤3 - 调用名为removenullelement的函数,并将切片作为参数传递给它。
-
步骤4 - 在removenullelement函数中,使用切片和过滤器作为输入调用filter函数。
-
步骤5 - 在filter函数内部,创建一个名为output的空切片,用于附加切片的元素。
-
步骤6 - 运行循环,直到切片的长度和filter函数将返回满足过滤条件的新切片。
-
步骤7 - 返回的切片将由removenullelement函数获取,该函数将使用filter函数从切片中删除所有的nil值,并将其返回给main函数。
-
步骤8 - 使用fmt.Println()函数在控制台打印新切片,其中ln表示换行。
示例
使用filter在示例中删除切片中的null的Golang程序。
package main
import "fmt"
func removenullelement(slice []interface{}) []interface{} {
return filter(slice, func(i interface{}) bool {
return i != nil
})
}
func filter(slice []interface{}, f func(interface{}) bool) []interface{} {
var output []interface{}
for _, element := range slice {
if f(element) {
output = append(output, element) //the values that satisfy filter will be appended in the output
}
}
return output
}
func main() {
slice := []interface{}{1, 2, nil, 3, nil, 4} //create slice
fmt.Println("The original slice is:", slice)
slice = removenullelement(slice)
fmt.Println("The slice after removing null element is:")
fmt.Println(slice) // Output: [1 2 3 4]
}
输出
The original slice is: [1 2 3 4]
The slice after removing null element is:
[1 2 3 4]
结论
我们通过两个示例执行了从切片中删除nil元素的程序。在第一种方法中,我们使用for循环删除nil元素,而在第二种方法中,我们使用了一个过滤器方法来删除null值。两个示例都得到了类似的结果。