doudansui6650 2017-11-17 16:03
浏览 609
已采纳

在Go中对数组进行排序和比较

I am a beginner Go student and I've been given the following assignment that needs to be built in Go:
-Read in a data file that contains all 83 counties of Michigan and the coordinates (in decimal) for each county seat.
-Set beginning coordinates to the college I attend. -Prompt user for a direction (n,s,e,w) and the program then finds the closest county seat in that specified direction. The found county seat then becomes the new starting point and the program starts over with the direction prompt.
-the program needs to show an error if the user hits water or is about to leave the state.

I am able to do most of this without issue, but here is where I'm hitting a brick wall: My plan is to use two arrays; one for latitude and one for longitude. I need to sort each array so that the numbers are in order from the eastern most county seat to the western most county seat (for latitude and the same for longtitude). My thinking is that if the user enters that they want to go west, the program will take the latitude coordinate of the starting point, determine where in the array it is supposed to be positioned then the program selects the closest coordinate in the numbers to the right of starting coordinate. The program should then take the determined coordinate and reference the main map of coordinates, find the matching complete set of coordinates then set the starting point to the new coordinates. I'm using float64s for the coordinate data types.

So to break it down: the data file reads in the coordinates of {1, 1.2} {2,1.3} {3, 2.4} {4, 5.4} {5, 6.6}; the starting point is (1,2) and the user wants to go west. So the latitude array holds {1.2, 1.3, 2.4, 5.4, 6.6} and the program needs to take the 2 from the starting, determine that it belongs between the 1.3 and 2.4, the determine that the 2.4 is the closest coordinate to the starting point. Then it takes the 2.4 and compares it to the data file coordinates to match the {3, 2.4}. The starting point is now {3, 2.4}. Then the program starts over from the user choosing a direction.

I apologize for the novel but I wanted to make sure I was as clear (as mud, I know LOL) as possible. How do I code the sort and comparisons? If there is an easier way to complete this assignment, I would be incredibly grateful for any help. Please keep in mind, I've only been working with Go for about a month and a half. Please be gentle with complicated code. LOL Thank you!

  • 写回答

1条回答 默认 最新

  • dsjbest2014 2017-11-17 17:08
    关注

    From a design perspective, consider creating a type that encapsulates the information about each county seat (e.g. a struct with the city/town name, latitude, and longitude) since they are logically related.

    The code example below shows how you could sort these objects by latitude or longitude using sort.Slice(...), making it easier to find which one is closest in the specified direction.

    Hope it helps!

    package main
    
    import "sort"
    
    type CountySeat struct {
      Name     string
      Lat, Lng float64
    }
    
    func main() {
      // Pretend we've read these from the data file.
      countySeats := []CountySeat{
        CountySeat{"Alpha", 3.0, 1.0},
        CountySeat{"Bravo", 2.0, 2.0},
        CountySeat{"Charlie", 1.0, 3.0},
      }
    
      // Sorting by latitude makes it easy to find N/S proximity.
      sort.Slice(countySeats, func(i, j int) bool {
        return countySeats[i].Lat < countySeats[j].Lat;
      })
      // Now countySeats are ordered by increasing latitude...
    
      // Sorting by longitude makes it easy to find E/W proximity.
      sort.Slice(countySeats, func(i, j int) bool {
        return countySeats[i].Lng < countySeats[j].Lng;
      })
      // Now countySeats are ordered by increasing longitude...
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容