Golang中如何从字符串数组中移除指定字符串项

Golang中如何从字符串数组中移除指定字符串项 我需要从latlngWithTime数组中移除第三个字符串项,只需要前两个值,想要移除所有的第三个值。

我拥有的结构:: latlngWithTime = [ “32.38537857, 67.6247667, 444444444”, “32.38537857, 67.6247667, 444444444”, “32.38537857, 67.6247667, 444444444”, “32.38537857,67.6247667,444444444” ]

我希望从上面得到如下结构:: latlng = [ “32.38537857, 67.6247667”, “32.38537857, 67.6247667”, “32.38537857, 67.6247667”, “32.38537857,67.6247667” ]

如何在Golang中实现这个?

func main() {
    fmt.Println("hello world")
}

更多关于Golang中如何从字符串数组中移除指定字符串项的实战教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

Archana:

strings.Split(coordinate, “,”)

确保在每个坐标上调用 strings.TrimSpace。你的输入看起来包含空格,而正确解析时这些空格不应成为数据的一部分。

strings.Split(coordinate, ",")

更多关于Golang中如何从字符串数组中移除指定字符串项的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


https://goplay.space/#zmN_ccxWmv5

创建一个与原始字符串切片大小相同的新字符串切片。用从0开始到最后一个逗号之前(不包含最后一个逗号)的子字符串切片填充它。

您想要移除的第三个值是否总是444444444?还是可能有不同的数字?

无论如何,请按以下步骤操作:

  • 遍历latlngWithTime
  • 使用正则表达式从字符串中移除第三个值
  • 将结果追加到新列表中
func main() {
    fmt.Println("hello world")
}

是的,我需要从整个列表中移除第三个数组项,为此我创建了一个函数,请看这个:

func GetNewRouteCoordinatesArray(coordinates []string) (routeCoordinates []string) {
	for _, coordinate := range coordinates {
		latLngArr := strings.Split(coordinate, ",")
		latString := latLngArr[0]
		lngString := latLngArr[1]
		/* append latlangstring values in routeCoordinates array of string */
		routeCoordinates = append(routeCoordinates, latString+`,`+lngString)
	}
	return routeCoordinates
}

有没有更优化的方法可以获得我上面提到的完全相同的结果?这解决了我的问题,但我正在寻找更优化的代码,因为单个人就有数千条记录。我需要在这里迭代处理大量数据。

难道更好的方法不是将数据正确"解析"到struct中吗?

type struct With {
  lang string
  long string
  randomNumber string
}

type WithOut {
  lang string
  long string
}

func parseWith(input string) With {
  values := strings.Split(input, ',')
  return With{
    lang: values[0],
    long: values[1],
    randomNumber: values[2],
  }
}

func (w With) ToWithOut() WithOut {
  return WithOut {
    long: w.long,
    lang: w.lang,
  }
}

这是一个没有任何验证的快速示例,但思路应该很清晰。

作为额外的好处,你可以实现fmt.Stringer接口,以便在需要时恢复原来的字符串表示形式。

如果数据量巨大,为什么不使用goroutine呢?你可以将原始切片分割后发送到不同的goroutine中执行相同的算法。这是Go语言的典型处理方式。尝试以下代码并调整不同的分割尺寸,最终结果的合并工作留给你自行完成。

package main

import (
  "fmt"
  "sync"
  "strings"
)

func GetNewRouteCoordinatesArray(coordinates []string) (routeCoordinates []string) {

   for _, coordinate := range coordinates {
     latLngArr := strings.Split(coordinate, ", ")
     latString := latLngArr[0]
    lngString := latLngArr[1]
    routeCoordinates = append(routeCoordinates, latString+`,`+lngString)
  }
  return 
}

func main() {
  latlngWithTime := []string {"32.38537857, 67.6247667, 444444444","32.38537857, 67.6247667, 444444444","32.38537857, 67.6247667, 444444444","32.38537857, 67.6247667, 444444444"}

 split:=1
 n := int(len(latlngWithTime)/split)
 m :=  len(latlngWithTime )%split

 if m !=0 {
n+=1
}

var wg sync.WaitGroup
results := make([][]string,n)

for i:=0;i<n;i++ {

wg.Add(1)
go func (k int) {
    defer wg.Done()
    end := (k+1)*split
    if end > len(latlngWithTime) {
      end = len(latlngWithTime)
    }

    results[k] = GetNewRouteCoordinatesArray(latlngWithTime[k*split:end])

   }(i)
  }

  wg.Wait()

  fmt.Println(results)
}

在Go语言中,可以通过分割每个字符串并重新组合前两个部分来实现这个需求。以下是完整的解决方案:

package main

import (
	"fmt"
	"strings"
)

func main() {
	latlngWithTime := []string{
		"32.38537857, 67.6247667, 444444444",
		"32.38537857, 67.6247667, 444444444",
		"32.38537857, 67.6247667, 444444444",
		"32.38537857,67.6247667,444444444",
	}

	// 创建新的切片来存储处理后的结果
	latlng := make([]string, len(latlngWithTime))

	for i, item := range latlngWithTime {
		// 按逗号分割字符串
		parts := strings.Split(item, ",")
		
		// 只取前两个部分并重新组合
		if len(parts) >= 2 {
			latlng[i] = strings.TrimSpace(parts[0]) + ", " + strings.TrimSpace(parts[1])
		}
	}

	fmt.Println("处理前:")
	for _, item := range latlngWithTime {
		fmt.Println(item)
	}

	fmt.Println("\n处理后:")
	for _, item := range latlng {
		fmt.Println(item)
	}
}

输出结果:

处理前:
32.38537857, 67.6247667, 444444444
32.38537857, 67.6247667, 444444444
32.38537857, 67.6247667, 444444444
32.38537857,67.6247667,444444444

处理后:
32.38537857, 67.6247667
32.38537857, 67.6247667
32.38537857, 67.6247667
32.38537857, 67.6247667

如果希望更简洁的写法,可以使用以下版本:

package main

import (
	"fmt"
	"strings"
)

func main() {
	latlngWithTime := []string{
		"32.38537857, 67.6247667, 444444444",
		"32.38537857, 67.6247667, 444444444",
		"32.38537857, 67.6247667, 444444444",
		"32.38537857,67.6247667,444444444",
	}

	latlng := make([]string, 0, len(latlngWithTime))
	
	for _, item := range latlngWithTime {
		parts := strings.Split(item, ",")
		if len(parts) >= 2 {
			latlng = append(latlng, strings.TrimSpace(parts[0])+", "+strings.TrimSpace(parts[1]))
		}
	}

	fmt.Println(latlng)
}

这种方法通过strings.Split()分割每个字符串,然后使用strings.TrimSpace()去除空格,最后重新组合前两个部分。

回到顶部