是否有一种更有效的方法(最好是O(1)而不是O(n),但至少要更快地输入)来对类型的矢量进行类型转换?
public Vector<String> typecastVector(Vector<Object> objects){
Vector<String> strings = new Vector<String>();
for(Object o : objects)
strings.add((String) o);
return strings;
}
Run Code Online (Sandbox Code Playgroud)
对于那些明显需要对Vector类或其他Generic类进行类型转换的人:正如接受的回答者所指出的那样,这可能是代码味道,您可能需要重构类层次结构中的代码.
具体来说,如果您还没有,则应考虑使用所述Vector或其他Generic类的类本身使用泛型.当我在自己的代码中执行此操作时,我完全消除了代码中与上述函数类似的函数需求.
如果您从未在自己的代码中实现泛型,请查看上面的"泛型"链接.您可能会惊讶地发现它们可以用于从Vector类型转换中精确实现您认为需要的功能.
我有一个对象:
stdClass Object
(
[Color] => Red
[Shape] => Round
[Taste] => Sweet
)
Run Code Online (Sandbox Code Playgroud)
我想修剪对象中的每个元素,如果该元素为空,则将其设置为"N/A"
所以这个对象:
stdClass Object
(
[Color] => Red
[Shape] =>
[Taste] => Sweet
)
Run Code Online (Sandbox Code Playgroud)
会变成这样的:
stdClass Object
(
[Color] => Red
[Shape] => N/A
[Taste] => Sweet
)
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一点,也许是array_walk?
我正在Flash(AS3)中构建一个与Facebook紧密集成的社交媒体应用程序 - 所有用户帐户都通过Facebook连接处理,所有Facebook连接都通过Javascript和AS3 Facebook API 的组合来处理.我在后端使用Codeigniter进行服务器端数据管理,包括通过Flash中的URLRequests跟踪网站上的用户操作和数据.
我的问题是我不知道如何防止欺骗从Flash发出的服务器请求; 理论上,恶意用户可以跟踪Flash对我的服务器进行的调用,并以(例如)插入垃圾数据并将其与我的数据库中给定的Facebook用户ID相关联的方式重现它们.所有身份验证都在客户端进行(通过Facebook JS API),服务器没有干预,所以我很难确定如何以确保用户的方式确保Flash和服务器之间的呼叫安全必须通过Facebook进行身份验证才能生成它们.
我考虑的一种可能性是使用客户端和服务器已知的加密方案来回传递Facebook UID,这肯定比明确传递它们更好.然而,只有一个有进取心的黑客有足够的时间/耐心才能打破计划(或反编译swf)以搞砸一切.
无论如何,我可能会过度思考这一点,但这似乎是一个重点,我真的不确定最好的方法.任何反馈将不胜感激!
我知道这是非常主观的,但这是我一直在努力的事情.我甚至对尝试学习一门新语言犹豫不决,因为我将在下面概述.如果这个关闭了,我想我会笑着承受它,但这是我想要解决的问题.
当我开始学习一门新语言时,似乎大多数学习资源都是针对新程序员的.然后,我最终阅读"详细"教程或其他东西,并感到无聊.我倾向于觉得我浪费了很多时间来研究变量如何工作,数据类型如何工作以及其他基本的东西.这些都是重要的事情,但我可以处理技术术语,并不需要像初学者那样为我分解的东西.
我也觉得如果我只是潜入一个项目,我将学习坏习惯,而不是从学习一门新语言中获得所有好处.我仍然会使用我已经知道的范例来做事情并且攻击他们使用新语言.
所以,我的问题是:你发现哪种策略最有助于充分利用新语言?你学到了什么技巧?
我写了一个简单的脚本来解决一个"逻辑谜题",即从学校获得许多规则的拼图类型,然后必须能够找到问题的解决方案,例如"有五位音乐家名为A,B,C ,D和E在音乐会上演奏,每个演奏一个接一个...如果A在B之前,D不在最后......谁在什么时候演奏?等等
为了评估可能的解决方案,我将每个"规则"编写为一个单独的函数,它将评估一个可能的解决方案(简单地表示为字符串列表)是否有效,例如
#Fifth slot must be B or D
def rule1(solution):
return solution[4] == 'B' or solution[4] == 'D'
#There must be at least two spots between A and B
def rule2(solution):
returns abs(solution.index('A') - solution.index('B')) >= 2
#etc...
Run Code Online (Sandbox Code Playgroud)
我有兴趣找到Pythonic方法来测试一个可能的解决方案是否通过所有这些规则,并能够在第一个失败后停止评估规则.
起初我写了最简单的事情:
def is_valid(solution):
return rule1(solution) and rule2(solution) and rule3(solution) and ...
Run Code Online (Sandbox Code Playgroud)
但这看起来相当丑陋.我想也许我可以通过列表理解之类的东西让这个阅读更加优雅......
def is_valid(solution)
rules = [rule1, rule2, rule3, rule4, ... ]
return all([r(solution) for f in rules])
Run Code Online (Sandbox Code Playgroud)
...但后来我意识到,由于列表理解是在all()评估函数之前生成的,因此它具有不会短路的副作用 - 即使第一个返回,每个规则也会被评估False.
所以我的问题是:是否有更多的Pythonic /功能方式能够评估True/ …
python functional-programming list-comprehension short-circuiting
当用户点击按钮时,我有一个正在旋转的图像.但它没有用.
我想看到图像逐渐旋转到90度直到它停止但它没有.单击按钮时,图像必须逐渐旋转90度.
我创建了一个SSCCE来演示这个问题.请使用CrossingPanelSSCE您选择的任何图像替换班级中的图像.只需将图像放入您的images文件夹并命名即可images/railCrossing.JPG.
RotateButtonSSCE
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
public class RotateButtonSSCE extends JPanel implements ActionListener{
private JButton rotate = new JButton("Rotate");
private VisualizationPanelSSCE vis = new VisualizationPanelSSCE();
public RotateButtonSSCE() {
this.setBorder(BorderFactory.createTitledBorder("Rotate Button "));
this.rotate.addActionListener(this);
this.add(rotate);
}
public void actionPerformed(ActionEvent ev) {
vis.rotatetheCrossing();
}
}
Run Code Online (Sandbox Code Playgroud)
CrossingPanelSSCE
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import …Run Code Online (Sandbox Code Playgroud) 如果只有一个线程要添加到队列中,并且只有一个线程要从队列中检索,我认为没有必要为这些访问操作锁定队列.
通常,检索将处于循环中.如果它错过了一个项目,它将在下一次尝试中获得它.唯一关心的是得到部分数据.如果它是值类型队列并且该值大于一个基本内存单元,则可能发生.但如果它是一个参考类型,它应该没问题.
我对吗?
我在SQL Server表中有此XML:
<root>
<meetings>
<meeting>
<id>111</id>
<participants>
<participant><name>Smith</name></participant>
<participant><name>Jones</name></participant>
<participant><name>Brown</name></participant>
</participants>
</meeting>
<meeting>
<id>222</id>
<participants>
<participant><name>White</name></participant>
<participant><name>Bloggs</name></participant>
<participant><name>McDonald</name></participant>
</participants>
</meeting>
</meetings>
</root>
Run Code Online (Sandbox Code Playgroud)
并想要这样的结果集:
MeetingID Name
111 Smith
111 Jones
111 Brown
222 White
222 Bloggs
222 McDonald
Run Code Online (Sandbox Code Playgroud)
这很容易使用,select from openxml但是我无法使用XQuery。有人可以帮我在那儿,也许也可以对每种方法都有优缺点?
我已解析.ics文件并将开始日期作为字符串,字符串包含这样的值20100803T130451Z(这是格式化日期字符串),我想将此字符串转换为我所需的字符串格式....
我所需的日期字符串格式是(星期二 - 2010年5月25日(像这样))
谁能帮我?提前致谢.....
使用C++我构建了一个具有许多setter函数的Class,以及在运行时可以连续调用的各种函数.所以我最终得到的代码如下:
A* a = new A();
a->setA();
a->setB();
a->setC();
...
a->doA();
a->doB();
Run Code Online (Sandbox Code Playgroud)
不是,这很糟糕,但我不喜欢一遍又一遍地输入"a->".
所以我重写了我的类定义,如下所示:
class A{
public:
A();
virtual ~A();
A* setA();
A* setB();
A* setC();
A* doA();
A* doB();
// other functions
private:
// vars
};
Run Code Online (Sandbox Code Playgroud)
那么我可以像我一样初始化我的课程:( 方法1)
A* a = new A();
a->setA()->setB()->setC();
...
a->doA()->doB();
Run Code Online (Sandbox Code Playgroud)
(我更喜欢它,因为它更容易编写)
为了更精确地实现这一点,你可以看到我在http://ken-soft.com/?p=234上写的SDL Sprite C++ Class
一切似乎都很好.但是,我对这种方法的任何反馈感兴趣.我注意到一个问题.如果我初始化我的班级:( 方法2)
A a = A();
a.setA()->setB()->setC();
...
a.doA()->doB();
Run Code Online (Sandbox Code Playgroud)
然后我有各种内存问题,有时事情不能正常工作(你可以通过改变我在Sprite Demo的main.cpp中初始化所有Sprite对象的方式来看到这一点).
这是正常的吗?或者行为应该是一样的吗?
编辑 setter主要是为了让我的生活更容易初始化.我的主要问题是方法1和方法2对我来说有什么不同?
编辑: 这是一个getter和setter示例:
Sprite* Sprite::setSpeed(int i) {
speed = i;
return …Run Code Online (Sandbox Code Playgroud)