doukan4795 2016-09-20 13:10
浏览 182
已采纳

将int数组转换为以','分隔的字符串

I know that for string array []string I can use strings.Join(a []string, ',') but I want to do the same thing for an integer array []int.

My usecase is something like this for a query where variants is []map[string]int

 var Ids []int
    sqlStr := "select id from mapping where my_id in ("
    for _, mp := range variants {
       sqlStr += "?,"
       Ids = append(Ids, mp["id"])
    }
    sqlStr = strings.TrimRight(sqlStr, ",")
    rows, err := db.Query(sqlStr+")", strings.Join(Ids, ',')) // I can't do this because Join needs String array

How to achieve this?

  • 写回答

3条回答 默认 最新

  • dpsu84620 2016-09-20 14:18
    关注

    Here is an efficient way to do that:

    func sqlIntSeq(ns []int) string {
        if len(ns) == 0 {
            return ""
        }
    
        // Appr. 3 chars per num plus the comma.
        estimate := len(ns) * 4
        b := make([]byte, 0, estimate)
        // Or simply
        //   b := []byte{}
        for _, n := range ns {
            b = strconv.AppendInt(b, int64(n), 10)
            b = append(b, ',')
        }
        b = b[:len(b)-1]
        return string(b)
    }
    

    You can use it in the SQL queries like that:

    query := `SELECT * FROM table WHERE id IN (` + sqlIntSeq(ids) + `)`
    

    Playground: https://play.golang.org/p/zi7YYetGu7.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题