- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想把数组的数据合并到我的结构变量中
下面是代码
我想在rest->distance中添加距离数组值
distance = ["12.44","45.32","56.1","54.22"]
var rest : [Restaurants] = []
var distance : [String] = []
struct Restaurants {
var name:String
var lat:Double
var long:Double
var distance:String?
}
let rest1 = Restaurants(name: "English Tea House", lat: 31.461812, long: 74.272524, distance: nil)
let rest2 = Restaurants(name: "Cafe Barbera", lat: 31.474536, long: 74.268103, distance: nil)
let rest3 = Restaurants(name: "Butler's Chocolate", lat: 31.467505, long: 74.251908, distance: nil)
let rest4 = Restaurants(name: "Freddy's Cafe", lat: 31.461312, long: 74.272124, distance: nil)
let rest5 = Restaurants(name: "Arcadian Cafe", lat: 31.464536, long: 74.268603, distance: nil)
let rest6 = Restaurants(name: "Big Moes", lat: 31.467305, long: 74.256908, distance: nil)
rest.append(rest1)
rest.append(rest2)
rest.append(rest3)
rest.append(rest4)
rest.append(rest5)
rest.append(rest6)
for location in rest {
distance.append(findDistance(from: location.lat, long: location.long))
}
// I want to add distance array values in rest -> distance
func findDistance(from lat: Double, long: Double) -> Double {
let source = CLLocation(latitude: 31.461512, longitude: 74.272024)
let destination = CLLocation(latitude: lat, longitude: long)
let distanceInMeters = source.distance(from: destination)
return distanceInMeters
}
最佳答案
这里有很多事情要做,所以我会告诉你解决方法。
首先,rest
是一个糟糕的变量名。当我第一次读它的时候,我以为这是“剩下的”,就像其他的东西一样,我在寻找“主要”数据在哪里。击键不需要花费美元,您只需输入restaurants
。
其次,创建一个空数组,并手动将所有这些餐馆追加到该数组中。相反,您只需从数组文字创建一个数组,它直接包含所有餐馆。不需要分开
为了回答您的直接问题,您可以使用zip
将rest
和distance
一起迭代,但问题是rest1
,rest2
。。。变数,注定要失败。当您复制/粘贴一堆行,而忘记更改其中一行,意外地写入rest.append(rest6); rest.append(rest6)
,忘记rest7
时会发生什么?
第三,您的findDistance(from:long:)
函数接受两个Double
s(纬度和经度),并使用它们构造一个CLLocation
。但是,当您查看这个函数的使用位置时,您已经有了一个CLLocation
,它被分解成两个Double
s,只需要findDistance(from:long:)
立即将它们重新组合成一个CLLocation
。相反,只要让findDistance
直接接受CLLocation
。
第四,Restaurants
数据类型是miss-named。不是很多餐馆。它是一家餐厅的模型。据此命名:Restaurant
应用这些改进(并且在路上固定一堆数据),我们得到:
struct Restaurant {
var name: String
var lat: Double
var long: Double
var distance: String?
}
let restaurants = [
Restaurant(name: "English Tea House", lat: 31.461812, long: 74.272524, distance: nil),
Restaurant(name: "Cafe Barbera", lat: 31.474536, long: 74.268103, distance: nil),
Restaurant(name: "Butler's Chocolate", lat: 31.467505, long: 74.251908, distance: nil,
Restaurant(name: "Freddy's Cafe", lat: 31.461312, long: 74.272124, distance: nil),
Restaurant(name: "Arcadian Cafe", lat: 31.464536, long: 74.268603, distance: nil),
Restaurant(name: "Big Moes", lat: 31.467305, long: 74.256908, distance: nil),
]
var distances = [Double]()
for location in restaurants {
distance.append(findDistance(to: location))
}
func findDistance(to destination: CLLocation) -> Double {
let source = CLLocation(latitude: 31.461512, longitude: 74.272024)
let distanceInMeters = source.distance(from: destination)
return distanceInMeters
}
zip(_:_:)
zip
并行迭代
restaurants
和
distances
,然后从每个距离对每个
restaurant
进行变异。像这样的:
for (restaurant, distance) in zip(restaurants, distances) {
restaurant.distance = distance
}
Restaurant
是一个值类型,所以循环中的
restaurant
变量是数组中变量的副本。设置其距离会使副本发生变化,但不会影响数组中的原始副本。
for i in restaurants.indices {
restaurants[i] = distances[i]
}
distances
数组。
distances
的唯一目的是用一堆值填充它,只是立即使用并丢弃它们,那么为什么我们都有数组呢?
for i in restaurants.indices {
restaurant.location = findDistance(to: location)
}
Restaurant
数据类型经历两个阶段的初始化,即a
code smell。首先我们用
nil
位置初始化它,然后将其设置为实际位置。为什么要麻烦?为什么我们不直接设定地点?
let distance = findDistance(to: location)
let restaurants = [
Restaurant(name: "English Tea House", lat: 31.461812, long: 74.272524, distance: distance),
Restaurant(name: "Cafe Barbera", lat: 31.474536, long: 74.268103, distance: distance),
Restaurant(name: "Butler's Chocolate", lat: 31.467505, long: 74.251908, distance: distance),
Restaurant(name: "Freddy's Cafe", lat: 31.461312, long: 74.272124, distance: distance),
Restaurant(name: "Arcadian Cafe", lat: 31.464536, long: 74.268603, distance: distance),
Restaurant(name: "Big Moes", lat: 31.467305, long: 74.256908, distance: nil),
]
findDistance(to:)
和
Restaurant.distance
修复缺陷
findDistance(to:)
到底做了什么?在内部,它与一些硬编码、未命名的位置有一定的距离。当我说“抄送”时,我会期待与我保持距离。如果它距离某个引用点a有一定距离,那么我希望API的拼写应该类似于
CLLocation(latitude: 31.461512, longitude: 74.272024)
,或者类似于这样。
someRestaurant.distance
的工作?如果我想要
someResaurant.distanceFromNorthPole
,
Restaurant
?API会变得非常臃肿,而
restaurant.distanceToSouthPole
类型最终会做得太多。如果我
restaurant.distanceToEquator
?我可以移动,当我移动时,一个预先计算的存储值如何跟上我?
struct Restaurant {
var name: String
var lat: Double
var long: Double
func distance(from other: CLLocation) -> Double {
let selfLocation = CLLocation(latitude: self.lat, longitude: self.long)
return selfLocation.distance(from: other)
}
}
let restaurants = [
Restaurant(name: "English Tea House", lat: 31.461812, long: 74.272524),
Restaurant(name: "Cafe Barbera", lat: 31.474536, long: 74.268103),
Restaurant(name: "Butler's Chocolate", lat: 31.467505, long: 74.251908),
Restaurant(name: "Freddy's Cafe", lat: 31.461312, long: 74.272124),
Restaurant(name: "Arcadian Cafe", lat: 31.464536, long: 74.268603),
Restaurant(name: "Big Moes", lat: 31.467305, long: 74.256908),
]
let pointA = CLLocation(latitude: 31.461512, longitude: 74.272024) // Name me!
// and now, whenever you need the distance to pointA:
for restaurant in restaurants {
let distanceFromA = restaurant.distance(from: pointA)
// This is for the purpose of a simple example only. Never hard code units like this,
// Use `Measurement` and `MeasurementFormatter` to create textual representations
// of measurements in the correct units, language and format for the user's locale.
print("\(restaurant.name) is \(distanceFromA) meters from \(pointA)")
}
restaurant
的作用。注意,几乎所有使用
restaurant.distanceToMe
和
CLLocation
的都需要先将其装箱到
lat
。所以让我们直接存储它,而不是分离单个组件并独立地传递它们。这可以防止像
long
这样的错误。
struct Restaurant {
var name: String
var location: CLLocation
func distance(from other: CLLocation) -> Double {
return self.location.distance(from: other)
}
}
CLLocation
而不是两个单独的
useLocation(lat: self.lat, long: self.long /* oops! */)
/
CLLocation
lat
s。这对于与位置api交互(其中
long
是用于交换位置信息的“通用货币”类型)更好,但对于硬编码的位置(如您的餐厅)则更麻烦,因为你所有的初始化器调用都会被一堆对
Double
的调用所膨胀:
let restaurants = [
Restaurant(name: "English Tea House", CLLocation(latitude: 31.461812, longitude: 74.272524)),
Restaurant(name: "Cafe Barbera", CLLocation(latitude: 31.474536, longitude: 74.268103)),
Restaurant(name: "Butler's Chocolate", CLLocation(latitude: 31.467505), longitude: 74.251908)),
Restaurant(name: "Freddy's Cafe", CLLocation(latitude: 31.461312, longitude: 74.272124)),
Restaurant(name: "Arcadian Cafe", CLLocation(latitude: 31.464536, longitude: 74.268603)),
Restaurant(name: "Big Moes", CLLocation(latitude: 31.467305, longitude: 74.256908)),
]
CLLocation
塞进一个小的初始化器中,以方便使用。我是在
CLLocation.init(latitude:longitude:)
的扩展中这样做的,而不是直接在
CLLocation.init(latitude:longitude:)
的初始声明中这样做,因为这样做会保留编译器生成的初始值设定项(称为“成员级初始值设定项”),否则将被替换:
extension Restaurant {
init(name: String, lat: Double, long: Double) {
self.init(name: name, location: CLLocation(latitude: lat, long))
}
}
let restaurants = [
Restaurant(name: "English Tea House", lat: 31.461812, long: 74.272524),
Restaurant(name: "Cafe Barbera", lat: 31.474536, long: 74.268103),
Restaurant(name: "Butler's Chocolate", lat: 31.467505, long: 74.251908),
Restaurant(name: "Freddy's Cafe", lat: 31.461312, long: 74.272124),
Restaurant(name: "Arcadian Cafe", lat: 31.464536, long: 74.268603),
Restaurant(name: "Big Moes", lat: 31.467305, long: 74.256908),
]
struct Restaurant {
var name: String
var location: CLLocation
func distance(from other: CLLocation) -> Double {
return self.location.distance(from: other)
}
}
Restaurant
的程序,它不需要两阶段初始化,为用户可能喜欢的任何点提供最新的距离数据,并且由于
Restaurant
和
Restaurant
被粘在一起而不易出现复制粘贴错误。
struct Restaurant {
var name: String
var location: CLLocation
func distance(from other: CLLocation) -> Double {
return self.location.distance(from: other)
}
}
extension Restaurant {
init(name: String, lat: Double, long: Double) {
self.init(name: name, location: CLLocation(latitude: lat, long))
}
}
let restaurants = [
Restaurant(name: "English Tea House", lat: 31.461812, long: 74.272524),
Restaurant(name: "Cafe Barbera", lat: 31.474536, long: 74.268103),
Restaurant(name: "Butler's Chocolate", lat: 31.467505, long: 74.251908,
Restaurant(name: "Freddy's Cafe", lat: 31.461312, long: 74.272124),
Restaurant(name: "Arcadian Cafe", lat: 31.464536, long: 74.268603),
Restaurant(name: "Big Moes", lat: 31.467305, long: 74.256908),
]
let pointA = CLLocation(latitude: 31.461512, longitude: 74.272024) // Name me!
// and now, whenever you need the distance to pointA you can do this (for example):
for restaurant in restaurants {
let distanceFromA = restaurant.distance(from: pointA)
// This is for the purpose of a simple example only. Never hard code units like this,
// Use `Measurement` and `MeasurementFormatter` to create textual representations
// of measurements in the correct units, language and format for the user's locale.
print("\(restaurant.name) is \(distanceFromA) meters from \(pointA)")
}
关于swift - 将数组数据追加到Struct变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55893353/
在 Python 中,我可以附加到一个空数组,例如: >>> a = [] >>> a.append([1,2,3]) >>> a.append([1,2,3]) >>> a [[1, 2, 3],
我正在阅读(并慢慢尝试)在 php 中与 txt 文件交互的方法。我已经尝试过追加,它将数据添加到txt文件的末尾但是 a+ 与 a 有何不同 在 w3schools 中它说: 一个 append 。
我想执行一个非常简单的操作:合并两个形状文件。具体来说,我有美国每个州的人口普查区域形状文件,我想将它们合并到一个形状文件中。最终,我想获取组合的形状文件并在一组经纬度坐标上执行叠加,以确定我的坐标属
当我们使用 append 和 cut 运算符时会出现什么问题? append2([],L,L):-!. append2([H|T],L,[H|TL]):-append2(T,L,TL).
我有一个函数处理程序: function handler(data) { console.log(`1. ${data}`); } 我想在相同的范围内附加或重新定义,如下所示: let old
我目前正在使用很多这样的内容来重构应用程序: StringBuffer buff1 = new StringBuffer(""); buff1.append("some value A"); buff
我正在编写一些代码来对不同类型的啤酒进行一些计算。我有一个使用 GUI 的主类,并有一个 JTextArea 来打印输出。在主类中调用追加工作得很好,但是当我尝试从外部类调用追加来写入文本区域时...
我有一个像这样的 jquery block 。渲染 html 后,我看到 标签立即打开和关闭,同样的方式,立即打开和关闭。我在他的代码中做错了什么吗?有更好的方法来实现这个吗? 谢谢 $.each(f
我在尝试克隆父 div 然后将其直接附加到其自身下方时遇到一个问题。只要最后一个节点是,我的函数就可以正常工作如此选择: A B C 将导致 A A.1
我正在尝试在现有 td 末尾附加一个 td。下面是以下代码(我在 jqgrid 中执行)。 $("#list_toppager_center tr:first td:eq(7)").append("C
我正在尝试在 jQuery 中的以下追加方法上设置超时。我尝试过的所有操作都不断返回Uncaught SyntaxError:意外的标识符 这是我的代码: setTimeout("$('#us
我想用 c 打开一个文件,然后向其中添加一些内容并关闭它。我只是想知道 fopen 中的 a+ 自动导航到文件的最后一个字符。 最佳答案 是的。 为什么不尝试一下,或者阅读一下手册呢? 这里是:
在我的代码中,我有一个输入字段,它是一个循环的值。 用户在第一个字段中输入所需的值。 用户单击按钮/徽章(单击我添加项目符号)以附加到模式。 根据字段中的输入值显示带有项目符号数的模态框。 例如,如果
是否可以使用 QUrlQuery 在不对 url 进行 strip 化的情况下 append 数据? 使用下面的代码将删除“?”之后的所有内容和结果是: https://foobar.com/Info
好吧,我正在为 iPhone 制作一个简单的聊天应用程序,我很幸运,它运行良好并且看起来很棒但是我有一些问题,一个这样的问题是我向用户显示富文本的方式.. 目前我有一个荒谬的系统,它是这样工作的 {发
在 C# 中格式化我做的字符串: string a = String.Format("/blah/blah/{0}_{1}/blah.html", int1, int2) 在Python中,它会自动将
我有一个 300 万行的 .txt 文件。该文件包含如下所示的数据: # RSYNC: 0 1 1 0 512 0 #$SOA 5m localhost. hostmaster.localhost.
我有一个问题。可以删除使用 javascript 附加添加的元素? 当我尝试删除添加的跨度时,什么也没有发生。 像这样: $(document).ready(function(){ $('#
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
到目前为止这是我的代码,我想做的是说用户输入 1 2 3 然后按 -1,他或她将被要求输入另一组数字,比如 9 8 7,我的程序是什么假设要做的是将它们显示为 1 2 3 9 8 7,而是像这样显示它
我是一名优秀的程序员,十分优秀!