我希望我的代码根据运行时值使用数组的短版本还是长版本(其中包含更多元素)。
for
如上所述,这是一个错误,因为三元运算符的参数不相同。
我该怎么做?
唯一的方法是声明两个已分配的开始和结束迭代器。但这会导致在迭代器上使用旧的for
,并且需要在auto const& myBegin = useShortArray ? shortArray.begin() : longArray.begin();
auto const& myEnd = useShortArray ? shortArray.end() : longArray.end();
for( auto it = myBegin ; it != myEnd ; ++it ) {
// use *it
}
块中的每次使用时都取消引用迭代器。
sec_urls = []
filename = './2000Q1.csv'
with open(filename, newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
for line in reader:
url = line[4].strip()
sec_urls.append(url)
print(url, 'downloaded and added to list')
是否有某种写方法(也许将数组复制到向量上?)以避免恢复到开始/结束版本?
答案 0 :(得分:6)
您可以使用lambda例如:
with open("/home/aaron/Documents/stackoverflow/test_NYC_taxi.csv", "r") as fares:
for fare in fares:
columns=fare.split(",")
pickup=datetime.datetime.strptime(columns[0],"%Y-%m-%d").date()
dropoff=datetime.datetime.strptime(columns[1],"%Y-%m-%d").date()
distance=columns[2]
fare=columns[3]
p_long=columns[4]
p_lat=columns[5]
d_long=columns[6]
d_lat=columns[7]
session.execute(prepared, [pickup,dropoff,distance,fare,p_long,p_lat,d_long,d_lat])
#closing the file
fares.close()
#closing Cassandra connection
session.shutdown()
或者,如果您想给它起一个名字,它可以是模板函数。
另一种方法是使用跨度,例如C ++ 20中即将到来的auto doTheStuff = [](auto& myArray) {
for(auto n : myArray) {
// Do the stuff
}
};
useShortArray ? doTheStuff(shortArray) : doTheStuff(longArray);
。在这种方法中,接受不同大小数组的模板函数是span的构造函数。这样,使用范围的函数就不必是模板。