围棋纵梁练习遇到问题

问题描述 投票:0回答:4

围棋巡回赛中的 Stringers 练习: 我得到了两种不同格式打印的两种不同输出。我唯一改变的是格式动词。他们是%v 和%d。理论上,它们会给出相同的输出。然而输出的顺序也改变了,这很奇怪。对此有什么想法吗?下面是我的代码:

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.
func (a IPAddr)String() string{
    // Here is what I changed
    return fmt.Sprintf("%d.%d.%d.%d",a[0],a[1],a[2],a[3])
}

func main() {
    addrs := map[string]IPAddr{
        "loopback":  {127, 0, 0, 1},
        "googleDNS": {8, 8, 8, 8},
    }
    for n, a := range addrs {
        fmt.Printf("%v: %v\n", n, a)
    }
}

输出:

谷歌DNS:8.8.8.8

环回:127.0.0.1

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.
func (a IPAddr)String() string{
    // Here is what I changed
    return fmt.Sprintf("%v.%v.%v.%v",a[0],a[1],a[2],a[3])
}

func main() {
    addrs := map[string]IPAddr{
        "loopback":  {127, 0, 0, 1},
        "googleDNS": {8, 8, 8, 8},
    }
    for n, a := range addrs {
        fmt.Printf("%v: %v\n", n, a)
    }
}

输出:

环回:127.0.0.1

谷歌DNS:8.8.8.8

输出的顺序也发生了变化。

go format printf
4个回答
3
投票

地图未订购。

使用范围循环迭代映射时,未指定迭代顺序,并且不保证从一次迭代到下一次迭代顺序相同[1]

[1]https://blog.golang.org/go-maps-in-action#TOC_7。

除了顺序之外,我没有看到

%v
%d
输出有任何区别。


2
投票
package main

import (
    "fmt"
)

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.

func (ip IPAddr) String() string {
    
    var s string
    for _, v := range ip {
        s += fmt.Sprint(int(v)) + "."
    }
    sr := s[:len(s)-1]
    return sr
}

func main() {
    hosts := map[string]IPAddr{
        "loopback":  {127, 0, 0, 1},
        "googleDNS": {8, 8, 8, 8},
    }
    for name, ip := range hosts {
        fmt.Printf("%v: %v\n", name, ip)
    }
}

0
投票
package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.

func (ip IPAddr) String() string {
   var s string
   for i:= range ip{
     if(i==0){
      s +=fmt.Sprint(int(ip[i]))
     } else{
        s +="."+fmt.Sprint(int(ip[i]))
     }
  }     

  return s
}
func main() {
  hosts := map[string]IPAddr{
    "loopback":  {127, 0, 0, 1},
    "googleDNS": {8, 8, 8, 8},
  }
  for name, ip := range hosts {
    fmt.Printf("%v: %v\n", name, ip)
  }
}

0
投票
  package main
    
    import ( "fmt"
         "strconv"
           )
    type IPAddr [4]byte
    
    // TODO: Add a "String() string" method to IPAddr.
    
    func (ip IPAddr) String() string{
        stri:=strconv.Itoa(int(ip[0]))
        for i:=1;i<4;i++ {
            stri+= "."+strconv.Itoa(int(ip[i]))
        }
        return stri
    }
    
    func main() {
        hosts := map[string]IPAddr{
            "loopback":  {127, 0, 0, 1},
            "googleDNS": {8, 8, 8, 8},
        }
        for name, ip := range hosts {
            fmt.Printf("%v: %v\n", name, ip)
        }
    }
 
© www.soinside.com 2019 - 2024. All rights reserved.