刚刚开始编写Go代码,我遇到了一个有趣的问题.
有没有办法轻松迭代数组中的项目,这些项目作为空接口引入而没有代码重复?考虑以下:
function(someArr interface{}){
switch someArr.(type){
case []int :
arr := (someArr).([]int)
for i := range (arr) {
// CODE
}
case []string :
arr := (someArr).([]string)
for i := range (arr) {
// CODE
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,CODE中的代码完全相同.但是,我无法将其从交换机中取出,因为类型断言arr将超出范围.同样,我无法在切换之前定义arr,因为我不知道它将是什么类型.这可能无法完成.在那种情况下,当我用一个不规则的模式(某些数组的int,某些数组或字符串)解析JSON时,对于这种事情有什么更好的习惯用法?
在ADO.NET中,您可以向命令对象添加参数,以将用户输入安全地添加到SQL查询中.SQL查询常见的其他谓词的等价物是什么?
我正在编写一个程序,它本质上是一个非常有限的OR映射器和SQL生成器(它主要关注具有元信息的数据库和符合该元数据的其他数据库).因此,我需要能够调用以下内容:
string sql = "select " + USER_SELECTED_COLUMNS +
" from " + USER_SELECTED_TABLE +
" where " + USER_CRITERIA;
Run Code Online (Sandbox Code Playgroud)
其中一些(如criteria)可信用户(我公司的其他开发人员)输入我的程序,而其他数据由不信任的用户(客户)通过他们的搜索等输入我的程序.
我想让这个程序安全,我知道上面的内容不是.目前我已经USER_SELECTED_COLUMNS用命令参数替换了,但是我无法找到CRITERIA和TABLEs的等价物.(或按订单列).是否有任何类似于SqlParameter我可以用于非选择谓词的ADO.NET功能?
我正在移植一个具有非常长的加载时间的程序,当我移植它时根本没有改进,因为缓慢是因为访问数据库服务器(而不是次优代码).我已经将加载移动到与Tasks库的单独线程上,现在UI在加载时不会冻结,但它确实让我对某些东西感到好奇:
该Task.Factory对象有一个方法StartNew,该方法应该创建一个新任务,启动它并返回对它的引用.这是有道理的,但似乎Task构造函数完全相同.
当我执行以下操作时:
Task catsFromDB = new Task(() => AddCategoriesFromDB(cts.Token), cts.Token);
catsFromDB.Start();
Run Code Online (Sandbox Code Playgroud)
我得到一个InvalidOperationException我真的不明白的错误.它似乎相信我已经把它踢掉了.我还没有.
[编辑]
erorr是:"InvalidOperationException,可能无法在已完成的任务上调用Start"
[编辑]
错误是我包含的一些取消代码.我需要在尝试再次运行之前重置取消.
我如何在我自己的模板类版本中解析,{if $var > 2}或者说{if $var}在.tpl文件中.我不想使用smarty,因为我不需要他们所有的插件.我只想要包含,if,for和foreachstatement.
我每次都会使用C#的String.Join和String.Split参数类型.问题是String.Split需要一个params char[]字符数组并且String.Join需要一个string.
有没有人有一个很好的助记符,可以帮助我记住哪些需要,所以我没有必要修复这一次我做一个字符串操作?
[编辑,因为每个人似乎都很困惑为什么我没有IDE支持]
当我大部分时间使用时,我正在使用LinqPad,就像这样:
String.Join("\n", @"LongRawString
WithPlentyOfLines
UsuallyGeneratedBySomeoneElse
OrProducedBySqlServerForExample".Split('\n').Select(x =>
{
x = x.Trim();
//create line of code, like:
return "int longRawStringIdx = reader.GetOrdinal(\"LongRawString\")";
}))
Run Code Online (Sandbox Code Playgroud)
我没有在LinqPad中获得IDE支持,并希望节省我每次返回并修复它所需的几秒钟.这很愚蠢,但是我们程序员编写的脚本只有一半可以自动执行我们每天执行的12秒任务.
问题是我搞砸了我是否我应该是给Split了string或Join将string作为第一个参数(或仅在的情况下Split).
我有一个python生成器,它可以生成大量数据,占用大量内存.有没有办法检测处理过的数据是否已被使用生成器的代码"消耗",如果是,请暂停直到它被消耗?
def multi_grab(urls,proxy=None,ref=None,xpath=False,compress=True,delay=10,pool_size=50,retries=1,http_obj=None):
if proxy is not None:
proxy = web.ProxyManager(proxy,delay=delay)
pool_size = len(pool_size.records)
work_pool = pool.Pool(pool_size)
partial_grab = partial(grab,proxy=proxy,post=None,ref=ref,xpath=xpath,compress=compress,include_url=True,retries=retries,http_obj=http_obj)
for result in work_pool.imap_unordered(partial_grab,urls):
if result:
yield result
Run Code Online (Sandbox Code Playgroud)
逃离:
if __name__ == '__main__':
links = set(link for link in grab('http://www.reddit.com',xpath=True).xpath('//a/@href') if link.startswith('http') and 'reddit' not in link)
print '%s links' % len(links)
counter = 1
for url, data in multi_grab(links,pool_size=10):
print 'got', url, counter, len(data)
counter += 1
Run Code Online (Sandbox Code Playgroud) 我有一个具有一堆属性的模型,但这里有两个感兴趣的id和key.key永远是独一无二的,id而不是那么多.当我尝试向id集合中添加多个具有相同模型的模型时,我收到此错误:
Uncaught Error: Can't add the same model to a collection twice
Run Code Online (Sandbox Code Playgroud)
我猜这是因为骨干正在使用它id来决定两个模型是否存在===.那是对的吗?如果有,有没有办法覆盖这种行为,而无需交换id和key属性的名称?我尝试搞乱这个系列,comparator但无济于事......
我正在尝试过滤我正在使用的一些数据,以便在我的测量设备中取出一些伪像,例如负数和错误.我一直在玩使用发电机这样做的想法.我使用的是Python 2.7.2
testlist = [12,2,1,1,1,0,-3,-3,-1]
gen = (i for i, x in enumerate(testlist) if x < 0 or x > 2.5)
for i in gen: testlist.pop(i)
print testlist
Run Code Online (Sandbox Code Playgroud)
返回:
[2, 1, 1, 1, 0, -3]
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么-3值出现在更新的"测试列表"中?
假设我有:
public class Cluster
{
List<Host> HostList = new List<Host>();
}
public class Host
{
List<VDisk> VDiskList = new List<VDisk>();
}
public class VDisk
{
public string Name {get; set}
}
Run Code Online (Sandbox Code Playgroud)
我需要具有给定名称的VDisk的Cluster对象中的所有主机.我可以用foreach做,但宁愿有LINQ查询.我尝试了一个SelectMany(),但它返回VDisk而不是Hosts.我是否需要实现自定义Comparer才能执行此操作?
这是我试过的:
Cluster CurrentCluster = new Cluster();
// add some hosts here
VDisk vdisk = new VDisk();
vdisk.Name="foo";
Run Code Online (Sandbox Code Playgroud)
所以现在我想要所有拥有名为"foo"的虚拟磁盘的主机
这将返回虚拟磁盘,而不是主机:
CurrentCluster.Hosts.SelectMany(h => h.VDisks.Where(v => v.Name == vdisk.Name));
Run Code Online (Sandbox Code Playgroud) ngResource 在RESTful(或至少是REST启发的)Api中管理数据访问看起来非常方便...但我想用它管理的一些数据是只读的(至少从我的应用程序的角度来看).
有没有办法阻止ngResource添加保存,删除和删除方法返回的对象?就文档而言,它看起来像是一个唯一的附加API ...
c# ×4
python ×2
.net ×1
ado.net ×1
angularjs ×1
backbone.js ×1
collections ×1
equals ×1
generator ×1
go ×1
javascript ×1
linq ×1
mnemonics ×1
ngresource ×1
php ×1
sql ×1
string ×1
templates ×1
templating ×1